Sergey750il: а почему вы говорите что элемента с id="32" изначально нету в DOM? У вас в коде нигде нету создания элементов, поэтому о таком я и не думал. Но даже в таком случае, видите, делегирование с .on() не проканает, т.к. вам для тестового примера приходится хардкодить селектор.
Вам не нравится идея с проверкой нажатого элемента?
Sergey750il: если вы говорите о делегировании, то мне кажется в том виде, в котором оно реализовано в jQuery, оно у вас не будет работать, т.к. чтобы делегировать с помощью .on() вы должны передать селектор. А у вас селектор этот переменный. Но можете попробовать. Я всё же считаю, что лучше будет делегировать клик по инпутам на body, а потом уже проверять нужный ли инпут нажат.
1. $(document).ready(function() { ... }) - таким образом вы на объект document вешаете обработчик, который выполняет переданную анонимную функцию когда страница загрузится,
2. Когда страница загрузилась, выполняется анонимная функция:
2.1. var memory ='50'; - объявляется переменная memory со значением '50',
2.2. $('.b-radio-toolbar-memory input:radio').click(function() { ... }) - на элементы выбранные селектором '.b-radio-toolbar-memory input:radio' вешается обработчик, который будет выполняться по событию click,
2.3. $('#' + memory + ' input:radio').click(function() { ... }) - на элементы выбранные селектором '#50 input:radio' вешается обработчик, тоже на click. В данном случае обработчик не вешается, т.к. селектор не возвращает элементов, элементов с таким id нету,
Sergey750il: ну вот, круто, теперь в поле JAVASCRIPT нажимаете кнопку с шестеренкой справа сверху , в появившемся окошке в FRAMEWORKS & EXTENSIONS выбираете jQuery, например edge. Таким образом подключаете jquery. Вот. Не забудьте слева сверху нажать кнопку update.
Теперь по коду - возвращать из анонимной функции не нужно, строка memory = $(this).val(); успешно справляется со своей задачей: записывает значение инпута в переменную memory. А вот второй .click()уже выполнился - ему не было передано никаких элементов и он не повесил ни на что обработчик. Именно поэтому я говорил что нужно вешать обработчик на body, который будет проверять кликнутый элемент на соответствие.
Sergey750il: ну вот, поэтому и обработчик никуда не вешается. Поэтому, мне кажется, в вашем случае вместо второго .click() стоит повесить обработчик на весь body, а в нем уже с помощью is проверять соответствует ли элемент селектору '#' + memory + ' input:radio', и если соответствует, делать всё что нужно делать. Ну и memory, конечно же, вынести на уровень повыше и либо обязательно инициализировать (устанавливать предварительное значение), либо в обработчике на body не делать проверку на соответствие если memory не задан.
Sergey750il: у вас несколько логических ошибок, две точно. Не только с областью видимости. Даже если вы решите её, всё равно не взлетит, из-за другой ошибки. А я лишь хотел пошагово подвести вас к осознанию этих мелких ошибок, то есть не чтоб я идеи тут генерировал, а у вас они появлялись в результате последовательного разбора алгоритма. Вы же спрашиваете Не могу понять почему не работает код?, а я вам как раз и объясняю. Идеи как решить это уже не по теме вопроса.
Sergey750il: то есть после первого .click() вы можете без проблем вывести в консоль эти элементы? Попробуйте - console.log($('#' + memory + ' input:radio').length)
ProgCS: ну вообще я на работе, в данный момент не смогу ничего подсказать. Но если хотите часа через 3 могу вам набросать функций, которые можно использовать.
JoveLebedev: лично я не представляю как мы сможем вам помочь не имея кода. Можете попробовать, например, полностью описать алгоритм как вы используете setTimeout, может это что-то прояснит.
JoveLebedev: нууу, вы говорите вас спасает setTimeout, вероятней всего это происходит потому что init или какая-другая функция отправляют запрос и только после получения ответа присваивают чему-то там значение. Лучше код давайте, всё сразу будет понятно.
Вам не нравится идея с проверкой нажатого элемента?