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

只是正常工作后,直到一个新的项目加入追加:类选择不追加(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属性可以省略。在内部进行类型检查,并可以区分第三个参数是'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

工作非常感谢,我将学习“上“更多。 –