2013-02-25 39 views
0

我有以下代碼,其中附加文本輸入到井中上聚焦,並隱藏它如果輸入是空。問題是它只適用於原始輸入字段,生成的第二個輸入字段不能在焦點上激活此功能。任何想法爲什麼?輸入相關的功能不運行後所附

$('input:text') 
.on('focus', function() 
{ 
    var $this = $(this); 
    if ($this.val() == "") 
    { 
    numItems++; 
    $($this.parent().append($('<input type="text" value ="" id="item' + numItems + '"></input>'))); 
    } 
}) 
.on('blur', function() 
{ 
    var $this = $(this); 
    if ($this.val() == "") 
    { 
    $this.hide(); 
    } 
}); 

回答

1

嘗試改變:

$('input:text') 
.on('focus', function() 

$(document) 
.on('focus','input:text', function() 
+3

只是爲了解釋這一點,使用'。對()'與元素只重視該行爲存在時該函數運行類型的元素 - 如果隨後額外的元素添加到DOM的行爲贏得了不會被註冊。如果您將行爲委託給文檔,它也會覆蓋稍後添加的匹配元素。退房[jQuery的文檔(http://api.jquery.com/on/)更多細節(具體而言,標題爲「直接和委託事件」下)。 – 2013-02-25 03:07:02

+0

謝謝你的工作就像一個魅力! 感謝Zaid的解釋,這很有道理。 – 2013-02-25 03:09:04

+0

不用擔心,如果你想進一步閱讀,添加一個鏈接到文檔:) – 2013-02-25 03:09:51

1

另外,您可以委託給其輸入是附加的直接父。

$("#parentOfInput").on('focus','input:text', function(){ 
    //Handler 
}); 

這比@ sudhir的答案稍微有效。

這將確保事件在它一直到達文檔根目錄之前被攔截。