2015-12-02 43 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

工作非常感謝,我將學習「上「更多。 –