событие клика с каждым циклом на динамически добавленных элементах javascript / jquery - PullRequest
0 голосов
/ 29 ноября 2018

Моя проблема в том, что $('input[name=isDefault]').length равен 2, но каждый из них работает только на один.

$(saveProduct).click(function (e) {
    $('input[name=isDefault]').each(function (index) {
       var that = this;
       console.log(index, 'index');
       console.log($('input[name=isDefault]').length);
       // do something...
    })
})

$('input[name=isDefault]') динамически добавляет объект во время другой логики.Я знаю, что есть решение, подобное $(upper container).on("event", dynamic obj inside upper container) - но это приводит к тому, что событие click происходит почти везде, потому что .on присоединяет событие к big area container

EDIT: Я сделал несколькоизменения для целей тестирования:

var imgs = imgs = $('div[name=fileContainer]');
console.log('before loop', imgs.length); // = 1
for (var i = 0; i < imgs.length; i++) {
    console.log('inside loop', imgs.length); // = 1
    //do something - imgs is dynamicly added html element by jquery, when I load page there is 1 element with that name
}

, но когда я пишу $('div[name=fileContainer]').length; в консоли, он равен 2 (конечно, когда я динамически добавил + 1 элемент fileContainer)

РЕДАКТИРОВАТЬ: это не ответ, но я исключил необходимость использовать вышеупомянутый цикл.В другом месте в коде у меня уже есть $(something).on("change", dynamiclyAddedElements function() {}) с другой главной целью ..., но!там я добавляю дополнительную функцию, где я создал javascipt obj с необходимыми данными.Тогда я могу использовать их в click событии.

1 Ответ

0 голосов
/ 29 ноября 2018

$ (верхний контейнер) .on («событие», динамический объект внутри верхнего контейнера) - но это приводит к тому, что событие click происходит почти везде, потому что .on присоединяет событие к контейнеру большой области

это не правильно, вы можете использовать второй параметр, чтобы указать селектор

например,

$('#upper_container').on('click', '.saveProduct', function(){...})

добавит обработчик щелчка (также динамически добавляемый) .saveProduct ине #upper_container, как вы утверждаете

...