2013-07-17 3 views
0

Я создаю ряд элементов, где в моей ROW у меня есть поле выбора/Drop Down. Что я хочу, так это то, что я хочу позвонить onChange функция на каждом выпадающем списке на каждой строке.Невозможно вызвать событие на динамически созданных элементах с помощью jQuery

count = 1; 
jQuery('select[id="warehouse-' + count + '"]').change(function() { 
    alert('hello'); 
    var urlWareHouse = "<?php echo $this->url('stock', array('action' => 'populateLocationInWarehouse', 'controller' => 'Stock')) ?>"; 
    url = urlWareHouse + '/' + jQuery('id="warehouse-' + count + '"]').val(); 
    SelectBoxNullValue = "Select Location"; 
    populateSelectBox(url, 'warehouse-'+count, 'location'); 
    count++; 
}); 

Мой populateSelectBox функция просто Аякса вызов, который заполнит данные для вновь созданной Select Element. Я не знаю, что я делаю неправильно. Дело в том, что я не могу вызвать onChange на недавно созданном с моим подходом.

+1

Вы рассмотрели метод ['.on()'] (http://api.jquery.com/on/#example-8) в API? Это раньше выполнялось с помощью .live() ', но с тех пор оно устарело. – oomlaut

ответ

3

Используйте функцию on() для привязки к элементам, даже новым, кроме того, вам нужно постоянно перепроверять элемент.

jQuery(document).on("change",'select[id="warehouse-' + count + '"]',function() { 
    alert('hello'); 
    var urlWareHouse = "<?php echo $this->url('stock', array('action' => 'populateLocationInWarehouse', 'controller' => 'Stock')) ?>"; 
    url = urlWareHouse + '/' + jQuery('id="warehouse-' + count + '"]').val(); 
    SelectBoxNullValue = "Select Location"; 
    populateSelectBox(url, 'warehouse-'+count, 'location'); 
    count++; 
}); 
+0

У меня здесь небольшой вопрос. Этот код помогает только 1-й строке. Я имею в виду, что событие связано только с 1-м появлением вызова, а не с другим, можете ли вы сказать, почему это происходит? –

+1

@ noobie-php Ваш селектор, вероятно, неверен, похоже, что у вас есть идентификатор с хранилищем, а затем некоторое число, я предполагаю, что число увеличивается каким-то образом, попробуйте использовать '' select [id^= store-] ' 'он выберет любой selectbox, у которого есть id, начинающийся с' store-' –

2

Используйте .on(), вместо .change().

. Замена только связывает один раз. Если элемент добавлен, его необходимо переопределить. .on делает это автоматически.

Кроме того, поскольку у вас есть идентификатор, вам не нужно указывать «выбрать» как часть вашего селектора.

jQuery('#warehouse-' + count) сделаю.

+0

thx для ответа, просто вопрос qucik, о котором вы упомянули, что .change() связывается только 1 раз. Могу ли я использовать его Для дальнейшего для 1-го события, я имею в виду использовать его полностью, Dont использовать onChange На всех –

+0

Позвольте мне перефразировать: он постоянно связывается (каждый клик), но не если элемент добавлен/удален из DOM используя JavaScript. –

+0

Вы имеете в виду тот элемент, для которого вызывается элемент (например, элемент Parent), или все элементы? Из всех элементов i, которые добавляются в DOM, используя JS –

Смежные вопросы