2011-09-29 55 views
-1

我有一個輸入文本與兩個事件和dinamically克隆它幾次。要正確地綁定這些元素,我使用:如何在jQuery中用.live綁定多個事件?

注意:此輸入文本具有focusin和focusout事件。

$('[selector_input]').die().live('focusin', function() { 
     alert('You focused me'); 
}); 

$('[selector_input]').die().live('focusout', function() { 
     alert('Bye!'); 
}); 

最終的結果是所有輸入只執行:focusout事件。如果我不使用.die(),我會重複調用相同的事件。

現在的解決辦法是:

$('[selector_input]').die().live('focusout focusin', function(event) { 
    if (event.type == "focusin") 
     alert('You focused me'); 
    else 
     alert('Bye!'); 
}); 

但我喜歡和喜歡的第一個代碼獨立。

+0

你知道'.die()'的意思是刪除之前爲該選擇器設置的事件處理程序,對吧? – cHao

+0

是的,我現在,但我不明白爲什麼當我退出.die(),我附加了多個事件,例如:沒有.die(),我得到5警報('你集中我'米做錯了嗎? –

+1

爲什麼你必須重新綁定事件? Live(與bind相對)意味着將事件綁定到選擇器,即事件綁定到與選擇器匹配的元素,即使它們是在綁定之後添加的。 –

回答

0

你可以做類似

$('path to your input').live({ 
    focusin: function() { $('some output div').html('Focus!'); }, 
    focusout: function() { $('some output div').html('Bye!'); } 
}); 

,或者你可以只取出.die() - 其目的就是要刪除以前的事件處理程序的選擇符。

如果你玩的是警報框,我不會同時惹焦點事件 - 當警報框出現時,警報框會變成活動的東西,導致聚焦的東西無法聚焦(然後可能重新聚焦),並導致您的事件處理程序有時無限調用。

順便說一句,有關如何使用.live()的示例,請參見http://jsfiddle.net/9pjWa/ - 聽起來您錯了。 的的.live()是你不需要每次添加元素時重新綁定事件;事件處理程序位於文檔,而不是元素,並且與選擇器匹配的每個元素都可以觸發事件,而不管它們是在.live()之前還是之後添加的。實際上,每次重新綁定時,都會添加另一個事件處理程序,它處理匹配元素的所有,這是您看到一堆稱爲一堆事件處理程序的另一個原因。

+0

5條生命 - >你將得到:5 !!焦點!焦點!焦點!焦點!焦點! –

+1

你到底在做什麼?你甚至知道'.live()'是如何工作的嗎? – cHao

+0

jajajajjaaj ...不僅五次,六,四等。當我用jQuery添加更多NEW DOM時,LIVE事件被稱爲..你知道嗎? –

2

只需指定die()

$('[selector_input]').die('focusin').live('focusin', function() { 
    alert('You focused me'); 
}); 

$('[selector_input]').die('focusout').live('focusout', function() { 
    alert('Bye!'); 
}); 

我不明白爲什麼你需要的die()調用雖然,你反覆結合事件的事件類型的電話嗎?