Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

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

Тема в разделе "Свободное общение", создана пользователем Bashmak, 7 июн 2020.

07.06.20 в 16:29
08.06.20 в 19:42
32
1.972
0
  1. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Как можно сгенерировать 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 строк должно получиться...

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

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.297
    Лучших ответов:
    31
    Рейтинги:
    +3.894 / 96 / -0
    volk-s-palcem-u-viska-10[1].jpg Это шутка


    Что ты вообще пытаешься сделать?
     
  3. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    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.
    И исходя из этой цифры и нужно генерировать код выше.
     
  4. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    С 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);
    Возможно и не верный будет ответ , сильно не пинать .
     
    • Нравится Нравится x 1
  5. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    В консоль выводит норм как надо, а вот с eval не срабатывает.

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

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Да
     
    • Нравится Нравится x 1
  7. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Ок, поиграюсь с кодом дальше сам, спасибо за помощь.
     
  8. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Не за что.
     
    • Нравится Нравится x 1
  9. PunPun

    VIP Кинотрафик v2

    Регистрация:
    11 июн 2015
    Сообщения:
    7.297
    Лучших ответов:
    31
    Рейтинги:
    +3.894 / 96 / -0
    А зачем EVAL???
     
  10. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    А какие ещё есть варианты сгенерировать и запустить jQuery код?
     
  11. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Можно ссылку в лс на страницу где пытаетесь запустить код ?
     
    • Нравится Нравится x 1
  12. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Отправил.

    Я там вставил в код 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 алерта :)

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

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    в консоле вылетает ошибка Uncaught SyntaxError: missing ) after argument list при просмотре ошибки оказывается что возникает она в данном месте $("#reader-pages option[value="#comicspage1"]").prop("selected", true);});
     
    • Нравится Нравится x 1
  14. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Хм, может в кавычках дело, но я вроде сделал экранирование.
     
  15. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Да, точно, попробовал изменить кавычки на одинарные и добавил экранирование вот так
    Код:
    $(\'#reader-pages option[value=\"#comicspage' + i + '\"]\')
    И теперь работает, спасибо ещё раз :)
     
  16. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Не за что .
     
    • Лучший Лучший x 1
  17. TeraMoune

    TeraMoune Бывалый

    Регистрация:
    6 апр 2019
    Сообщения:
    310
    Лучших ответов:
    3
    Рейтинги:
    +130 / 9 / -0
    А в чём суть переменной f и ненужного массива под код, он же вроде как не несёт функции или массив потом еще где-то используется ? Да и переменная самоисполняемая, что тоже озадачивает.
     
    #17 TeraMoune, 7 июн 2020
    Последнее редактирование: 7 июн 2020
  18. igrovik

    igrovik Местный

    Регистрация:
    11 дек 2016
    Сообщения:
    1.007
    Лучших ответов:
    8
    Рейтинги:
    +354 / 12 / -0
    Ну как писал выше с js я не сильно еще знаком , поэтому если вы имеете более лучшее решение для человека, то никто не мешает помочь ответом.
     
  19. TeraMoune

    TeraMoune Бывалый

    Регистрация:
    6 апр 2019
    Сообщения:
    310
    Лучших ответов:
    3
    Рейтинги:
    +130 / 9 / -0
    Ну хоть мысли то должны быть ?)

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

    igrovik Местный

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