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

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

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

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

07.06.20 в 16:29
08.06.20 в 19:42
32
1.978
0
  1. PunPun

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.896 / 96 / -0
    А зачем это делать?
     
  2. TeraMoune

    TeraMoune Бывалый

    Регистрация:
    6 апр 2019
    Сообщения:
    310
    Лучших ответов:
    3
    Рейтинги:
    +130 / 9 / -0
    igrovik, Выдохни, я не наезжаю на тебя, так что не нужно в таком тоне отвечать словно я насмехаюсь над тобой, делать мне вот больше нечего. А так вопрос частично и автору темы, зачем и почему у него такой код для каких манёвров он такое придумал, ему об этом и спросили. Но ответа так я и не наблюдаю.
     
  3. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    На странице имеются якоря, допустим 10.
    Через js подсчитывается количество якорей и записывается число 10 в переменную. На каждой странице это число всегда разное и может доходить до 100-200 и в редких случаях до 300-400.
    Далее на основании этого числа нужно автоматически сгенерировать код и запустить его, чтобы он начал работать. Как сделать это без eval?
     
  4. TopicStarter Overlay
    Bashmak

    PRO Users

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

    TeraMoune Бывалый

    Регистрация:
    6 апр 2019
    Сообщения:
    310
    Лучших ответов:
    3
    Рейтинги:
    +130 / 9 / -0
    Bashmak , Ну радуйся, а мог бы ответить без лишних так же нотаций, и не надо преувеличивать, вопрос был всего один, до тонны такого количества не достаточно. Ты вопрос задаёшь так, что ответить это меньшее, что ты можешь, а когда вот так отвечают то и отвечать пропадает желание.
    Что до генерации кода, вопрос стоит именно в этом зачем ? Пиши просто при загрузке страницы получение количества элементов $('elem').length, добавь это в цикл и получишь каждый раз N количество срабатываний. А в теле цикла как и обычно опять прописываешь код, подставляя i.

    Вроде бы уже прилично времени занимаешься, но не заметно даже, что пытаешься понять. Что не ужели совсем с 2017го никакого накопительного эффекта не происходит:eek:
     
  6. PunPun

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

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

    PRO Users

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

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

    Регистрация:
    11 июн 2015
    Сообщения:
    7.299
    Лучших ответов:
    31
    Рейтинги:
    +3.896 / 96 / -0
  9. TopicStarter Overlay
    Bashmak

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Я пробовал, но у меня чёт не работало, потом я обратился за советом на хабр(тостер), там посоветовали использовать eval.
    Попробую вечером ещё раз без eval, может что-то с кавычками намудрил.
    А в чём проблема использовать eval?
     
  10. TeraMoune

    TeraMoune Бывалый

    Регистрация:
    6 апр 2019
    Сообщения:
    310
    Лучших ответов:
    3
    Рейтинги:
    +130 / 9 / -0
    Да ответили же, не нужен он.

    Код:
        $("elem").appear();
        $("elem").on("appear", function(event, current) {
            $("#reader-pages option[value=\"#comicspage"+$(".header-3").index($(current).last())+"\"]").prop("selected", true);
        });
    P.S. Обновил, цикл тоже не нужен. jquery и так внутренне применяет ко всем найденным $(elem) действия. В своём цикле.

    В прочем это практически тот же самый пример с git'a
     

    Вложения:

    #30 TeraMoune, 8 июн 2020
    Последнее редактирование: 8 июн 2020
  11. TopicStarter Overlay
    Bashmak

    PRO Users

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

    PRO Users

    Регистрация:
    25 фев 2017
    Сообщения:
    642
    Лучших ответов:
    1
    Рейтинги:
    +167 / 25 / -0
    Я не понимаю где в твоём примере указать какое количество строк нужно выполнить?
     
  13. TeraMoune

    TeraMoune Бывалый

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

    Этот код, применяет 46 раз appear к объекту с ID
    Код:
    for(var i = 1; i <= 46; i++){
    $('#lcomicspage' + i + '').appear(); //Single action
    };
    А если у нас вместо ID будет class одинаковый который связывает все необходимые элементы то вышеуказанный код будет равен коду с одну строку.
    Код:
    $('.elem').appear(); //Mass action on 46 elemts if exist class .elem
    Понял или нет ?

    Даже если нету никакой возможности добавить к применяемым объектам класс связывающий их в группу то всегда можно прописать некую выборку по типу выбрав сперва главного родителя затем применив .find('a') найти все ссылки, или прямо $('родитель вложенные_элементы') или как-то еще иначе. Короче вариантов достаточно как докопаться до нужных объектов и навязать им функцию.

    В моём примере код работает на классе header-3 которые являются заголовками в сайдбаре, и после его применения у меня по достижению определённого заголовка сменяется селект на ячейку с его индексом.

    В моём случае на примере у меня вот так.
    Код:
        $('.header-3').appear();
        $(".header-3").on("appear", function(event, current) {
            $("#reader-pages option[value=\"#comicspage"+$(".header-3").index($(current).last())+"\"]").prop("selected", true);
        });
    HTML:
    <select id="reader-pages" style="position:fixed;top:0;left:0;z-index:9999;">
    <option value="#comicspage0">0</option>
    <option value="#comicspage1">1</option>
    <option value="#comicspage2">2</option>
    <option value="#comicspage3">3</option>
    </select>
    P.S
    Вот это $all_appeared_elements, как раз нужная переменная которую ты не используешь. Она содержит количество видимых элементов и именно она должна тебе заменить i счётчик в участке кода
    Код:
    $('#reader-pages option[value="#comicspage' + i + '"]')
    Но есть один нюанс, данная переменная может хранить в себе от 1 до не определённого количества элементов, поэтому есть last() чтобы выбирать всегда последний.

    А вот i в той области функции уже нету, она там не доступна.
     
    #33 TeraMoune, 8 июн 2020
    Последнее редактирование: 8 июн 2020
Яндекс.Метрика