2015-12-02 5 views
-2
$(".quantidade").on("change blur", function() { 
     if ($(this).val().length) { 
      validateField("quantidade"); 
     } else { 
      invalidateField("quantidade"); 
      showGeneralMessage("É necessário preencher a quantidade!", "danger"); 
     } 
    }); 

Он работает просто отлично, пока новый элемент не добавляются с Append:селектор класса не работает после добавления (JQuery)

$(".btn-add-produto").click(function() { 
    ... 
    $("#listaProdutosPedido").append(content); 
    ... 
}); 

Это «содержание» включает в себя вход с тем же классом. После добавления этой части html селектор классов к нему не применяется. Я предполагаю, что это происходит, потому что, когда документ готов, эта часть HTML не существует. Как «перезагрузить» javascript/документ, чтобы селектор работал даже с будущими ссылками? Я попытался проверить с помощью setInterval(), но он не работает также ...

+0

Вы отлаживали его? –

+0

Использовать делегацию событий '$ (" # listaProdutosPedido "). On (" change blur "," .quantidade ", null, function() {...'. – DavidDomain

+0

@DavidDomain Свойство 'null' может быть опущено. JQuery обрабатывает тип проверки внутри и может различать, когда третий аргумент является аргументом 'data' или функцией' handler'. Он работает в любом случае и будет решать проблему OP. – War10ck

ответ

2

Необходимо использовать .on() делегированный синтаксис события. В деле делегирования вы присоединяете событие к родительскому элементу. Внутри jQuery полагается на способность событий пузырить дерево DOM. Когда будет найдено событие указанного типа с свойством e.target, соответствующим вашему делегированному селектору, ваше событие будет запущено.

Для размещения этого изменения, изменить код следующим образом:

$(document).on("change blur", ".quantidade", function() { 
    if ($(this).val().length) { 
     validateField("quantidade"); 
    } else { 
     invalidateField("quantidade"); 
     showGeneralMessage("É necessário preencher a quantidade!", "danger"); 
    } 
}); 

Обратите внимание, делегируя на этом максимуме уровня крайне неэффективно. document следует изменить для ближайшего родительского элемента, который содержит недавно добавленный контент. В этом случае я использовал его, чтобы продемонстрировать, как происходит процесс, потому что в вашем вопросе не было данных дерева HTML DOM. Внедряя это в свою систему, я рекомендую вам соответственно обновить селектор document.

+1

Это сработало! Большое спасибо, я изучу " на "больше. –