JQuery добавить с флажком, если установлен, он ничего не вернет? - PullRequest
3 голосов
/ 21 ноября 2011

Я динамически сгенерировал список типов вина из базы данных, используя AJAx и PHP, вот функция

function wineTypeHandler(data){
            var Type = data.Type;
            var countType = data.countType;
            for(var i = 0; i < countType; i++){

                $("#selectType").append(

                $("<input />").attr({
                  type: 'checkbox',
                    name: 'Type',
                    class: 'wineTypeCheck',
                     value: Type[i]
                  }), Type[i] + "<br />"
            );
            }   
        }

Как вы можете видеть, я "добавил" результаты в некоторый div с идентификатором selectType,все это работает нормально, моя единственная проблема - когда я хочу обновить другой список на основе того, что было проверено из этого списка, он ни на что не отвечает !.Когда я пробую этот и многие другие способы

$(document).ready(function(){

$(':checkbox').click(function(){
alert('started');

    // other code
        return true;

});

});

Это ничего не предупреждает !!Кто-нибудь может мне помочь с этой проблемой.

Заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 21 ноября 2011

.click() присоединяется к элементам, которые существуют при создании DOM.Ваши элементы генерируются динамически, поэтому .click() фактически не применяется к ним.

Вы должны использовать .live() для нацеливания на динамически генерируемые элементы, так как он присоединяется к любому элементу, который создается послеDOM изначально загружен.Я также предлагаю использовать событие change вместо click:

$(':checkbox').live('change', function(){
  // No need to return true;
});
1 голос
/ 21 ноября 2011

Это потому, что вы назначаете функцию щелчка после загрузки страницы, но до того, как ваши флажки были созданы динамически.
В зависимости от того, какую версию jQuery вы используете, вы можете использовать on () (для jQuery версии 1.7 или выше), делегат () (для более старых версий jquery) или live () (простые, но неэффективные) функции для регистрации события в динамически создаваемых элементах.

0 голосов
/ 21 ноября 2011

Вам необходимо привязать событие click после добавления элемента в DOM. Это популярная проблема для разработки JavaScript. Я бы порекомендовал создать функцию, которая устанавливает событие связывания, и вызывать его после вашего вызова добавления (а также для jQuery (document) .ready ()).

Edit: я вижу много рекомендаций для jQuery.live (). Важно отметить, что метод jQuery live () устарел и не должен использоваться.

0 голосов
/ 21 ноября 2011

Просто попробуйте это

$(':checkbox').live('change', function(){

});
0 голосов
/ 21 ноября 2011

Событие привязано только к существующим элементам. Вам нужно использовать live

$(':checkbox').live("click", function(){
    alert('started');
});

EDIT:

Начиная с jQuery 1.7, метод .live () устарел. Используйте .on (), чтобы прикрепить обработчики событий. Пользователи более старых версий jQuery должны использовать .delegate () вместо .live () .

.

jQuery 1.4.3+ использовать делегат

$(#selectType).delegate(':checkbox', "click", function(){
    alert('started');
});

jQuery 1.7+ используйте на

$(#selectType).on("click", ':checkbox', function(){
    alert('started');
});
...