2013-03-11 140 views
1

我對面,增加了自定義事件檢測到從一個鍵盤或鼠標事件源於輸入文本更改代碼來和文檔說,使用bind()附加的自定義事件,如:自定義事件與綁定()與上()

$('#exhibita').bind('hastext', function() { 
    $('#exhibitaButton').removeClass('disabled').attr('disabled', false); 
}); 

jQuery docs狀態

從jQuery 1.7開始,.on()方法是將事件處理程序附加到文檔的首選方法。對於早期版本,.bind()方法用於將事件處理程序直接附加到元素。

我想我可能只是重寫代碼:

$(document).on('hastext', '#exhibita', function() { 
    $('#exhibitaButton').removeClass('disabled').attr('disabled', false); 
}); 

但該事件處理程序永遠不會觸發。

問題

  • 我做出的,我使用on()的錯誤呢?
  • 必須將提供自定義事件的代碼重寫爲支持on()?如果是這樣,必須改變什麼?
  • bind()是否被記錄爲未來jQuery版本中的候選人?我沒有在文檔中看到折舊警告,但是我知道live()die()已從1.9中刪除...
  • 是否有將來可以使用這些自定義事件而不重寫代碼的方法?

回答

1

您在這裏使用的方式on這裏創建了甚至是委派。這基本上相當於舊的jquery live

此自定義事件可能不會正常泡泡。試試這個:

$('#exhibita').on('hastext', function() { 

如果綁定工作,這將工作。

+0

未委託版本正在工作。任何想法爲什麼自定義事件可能不會正確泡,或如何解決? – 2013-03-11 21:10:17

+0

我覺得它更像舊的.delegate,但我可能是錯的。這真的是.live曾經如何工作? – Fresheyeball 2013-03-11 21:10:36

+0

@Fresheyeball由於'document'被用作第一個選擇器,所以它和'live'一樣。如果使用其他選擇器代替'document',那麼它將與'delegate'相同。 'delegate'也可以用'document'調用,在這種情況下,它也相當於'live'。 – 2013-03-11 21:11:46