Редактор темы

Как с помощью eval запустить цикличный код с возрастанием?

  • Автор темы Автор темы Bashmak
  • Дата начала Дата начала

Bashmak

PRO Users
Регистрация
25 Фев 2017
Сообщения
642
Рейтинг реакций
90
Баллы
28
1/3
Автор темы
Как можно сгенерировать jquery и запустить код внутри js файла?

Я пробовал через eval, и в принципе работает, но цифра не возрастает.

Вот мой код:

Код:
let code = 'for(var i = 1; i <= 46; i++){$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop(\"selected\", true);});}';
eval(code);


Но вместо ' + i + ' у меня выходит всегда одна и та же цифра.

А должно получиться так:

Код:
$("#lcomicspage1").appear();$("#lcomicspage1").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage1\"]").prop("selected", true);});
$("#lcomicspage2").appear();$("#lcomicspage2").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage2\"]").prop("selected", true);});
$("#lcomicspage3").appear();$("#lcomicspage3").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage3\"]").prop("selected", true);});
И так далее 46 строк должно получиться...


А у меня почему-то цифра не растёт, в чём ошибка?
 
volk-s-palcem-u-viska-10[1].jpg


Что ты вообще пытаешься сделать?
 
Автор темы


Что ты вообще пытаешься сделать?
select-jakor.jpg

Вот это, когда юзер достигает нужного якоря, изменяется option в select с таким же value как и якорь.
Всё уже настроено и работает, осталось только генерировать вот этот код:
Код:
$("#lcomicspage1").appear();$("#lcomicspage1").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage1\"]").prop("selected", true);});
$("#lcomicspage2").appear();$("#lcomicspage2").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage2\"]").prop("selected", true);});
$("#lcomicspage3").appear();$("#lcomicspage3").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage3\"]").prop("selected", true);});
И так далее 46 строк должно получиться...


На каждой странице количество якорей всегда разное, может быть как 46, так и 23.
И исходя из этой цифры и нужно генерировать код выше.
 
Как можно сгенерировать jquery и запустить код внутри js файла?

Я пробовал через eval, и в принципе работает, но цифра не возрастает.

Вот мой код:

Код:
let code = 'for(var i = 1; i <= 46; i++){$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop(\"selected\", true);});}';
eval(code);


Но вместо ' + i + ' у меня выходит всегда одна и та же цифра.

А должно получиться так:

Код:
$("#lcomicspage1").appear();$("#lcomicspage1").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage1\"]").prop("selected", true);});
$("#lcomicspage2").appear();$("#lcomicspage2").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage2\"]").prop("selected", true);});
$("#lcomicspage3").appear();$("#lcomicspage3").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage3\"]").prop("selected", true);});
И так далее 46 строк должно получиться...


А у меня почему-то цифра не растёт, в чём ошибка?

С js не сильно но может это поможет

HTML:
var f = (function(){
        var code = [], i;
        for(i = 0; i < 46; i++)
        {
            (function(i)
            {
                code[i] = '$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop(\"selected\", true);});';
                console.log(code[i]);
                
            })(i);
        }
        })();
вместо onsole.log(code); ставим
eval(code);
Возможно и не верный будет ответ , сильно не пинать .
 
Автор темы
С js не сильно но может это поможет

HTML:
var f = (function(){
        var code = [], i;
        for(i = 0; i < 46; i++)
        {
            (function(i)
            {
                code[i] = '$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop(\"selected\", true);});';
                console.log(code[i]);
             
            })(i);
        }
        })();
вместо onsole.log(code); ставим
eval(code);
Возможно и не верный будет ответ , сильно не пинать .

В консоль выводит норм как надо, а вот с eval не срабатывает.

Код:
console.log(code[i]); заменить на eval(code[i]);
Так надо сделать?
 
Посмотреть вложение 23413

Вот это, когда юзер достигает нужного якоря, изменяется option в select с таким же value как и якорь.
Всё уже настроено и работает, осталось только генерировать вот этот код:
Код:
$("#lcomicspage1").appear();$("#lcomicspage1").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage1\"]").prop("selected", true);});
$("#lcomicspage2").appear();$("#lcomicspage2").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage2\"]").prop("selected", true);});
$("#lcomicspage3").appear();$("#lcomicspage3").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage3\"]").prop("selected", true);});
И так далее 46 строк должно получиться...


На каждой странице количество якорей всегда разное, может быть как 46, так и 23.
И исходя из этой цифры и нужно генерировать код выше.
А зачем EVAL???
 
Автор темы
Можно ссылку в лс на страницу где пытаетесь запустить код ?
Отправил.

Я там вставил в код alert("Test' + i + '"); чтобы проверить срабатывает скрипт или нет, и он не срабатывает, так как алерт не выводится.

Код:
code[i] = 'alert("Test' + i + '");$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop("selected", true);});';


Но если удалить всю остальную часть и оставить только алерт, вот так:

Код:
code[i] = 'alert("Test' + i + '");';


Тогда норм срабатывает, и всплывает 43 алерта 🙂

Но почему не запускается алерт с остальным кодом, я вот понять не могу.
 
Отправил.

Я там вставил в код alert("Test' + i + '"); чтобы проверить срабатывает скрипт или нет, и он не срабатывает, так как алерт не выводится.

Код:
code[i] = 'alert("Test' + i + '");$("#lcomicspage' + i + '").appear();$("#lcomicspage' + i + '").on("appear", function(event, $all_appeared_elements) {$("#reader-pages option[value=\"#comicspage' + i + '\"]").prop("selected", true);});';


Но если удалить всю остальную часть и оставить только алерт, вот так:

Код:
code[i] = 'alert("Test' + i + '");';


Тогда норм срабатывает, и всплывает 43 алерта 🙂

Но почему не запускается алерт с остальным кодом, я вот понять не могу.
в консоле вылетает ошибка Uncaught SyntaxError: missing ) after argument list при просмотре ошибки оказывается что возникает она в данном месте $("#reader-pages option[value="#comicspage1"]").prop("selected", true);});
 
Автор темы
в консоле вылетает ошибка Uncaught SyntaxError: missing ) after argument list при просмотре ошибки оказывается что возникает она в данном месте $("#reader-pages option[value="#comicspage1"]").prop("selected", true);});
Хм, может в кавычках дело, но я вроде сделал экранирование.
 
Автор темы
Да, точно, попробовал изменить кавычки на одинарные и добавил экранирование вот так
Код:
$(\'#reader-pages option[value=\"#comicspage' + i + '\"]\')
И теперь работает, спасибо ещё раз 🙂
 
Да, точно, попробовал изменить кавычки на одинарные и добавил экранирование вот так
Код:
$(\'#reader-pages option[value=\"#comicspage' + i + '\"]\')
И теперь работает, спасибо ещё раз 🙂
Не за что .
 
А в чём суть переменной f и ненужного массива под код, он же вроде как не несёт функции или массив потом еще где-то используется ? Да и переменная самоисполняемая, что тоже озадачивает.
 
Последнее редактирование:
А в чём суть переменной f и ненужного массива под код, он же вроде как не несёт функции или массив потом еще где-то используется ? Да и переменная самоисполняемая, что тоже озадачивает.
Ну как писал выше с js я не сильно еще знаком , поэтому если вы имеете более лучшее решение для человека, то никто не мешает помочь ответом.
 
Ну как писал выше с js я не сильно еще знаком , поэтому если вы имеете более лучшее решение для человека, то никто не мешает помочь ответом.
Ну хоть мысли то должны быть ?)

Просто прописать прямой код в место назначения и он исполнится без всяких eval, а если уж отложка нужна то вот тут как раз и в функцию поместить код, опять же без всяких
let code ... с последующим eval. Не пробовали ?
 
Ну хоть мысли то должны быть ?)

Просто прописать прямой код в место назначения и он исполнится без всяких eval, а если уж отложка нужна то вот тут как раз и в функцию поместить код, опять же без всяких
let code ... с последующим eval. Не пробовали ?
Ещё раз повторюсь, имеете лучше решение выложите его для человека, если вы имеете дело с js. Я с ним встречаюсь не так часто что бы знать все что с ним связано, поэтому.
Да конечно можно было бы сделать проще
HTML:
for(i = 0; i < 46; i++)
        { $("#lcomicspage' + i + '").appear();'; и т.д и т.п }
Но вопрос был каков ? Связан с eval верно ? Я не Ванга что бы знать для какого маневра нужно это человеку.
Если не прав то соизвольте простить, следующий раз буду ожидать Вашей помощи людям, далее разрешите откланятся.
 

Похожие темы Последние темы Популярные темы

Назад
Сверху