2012-08-07 44 views
0

與jQuery Mobile的合作,我想在一個簡單的複選框看起來像這樣一個點擊事件處理程序:jquery mobile:爲什麼.bind()工作,但不addEventListener?

<input type="checkbox" name="cb" id="cb" /> 
<label for="cb">I am a checkbox</label> 

使用jQuery添加單擊事件處理程序的工作原理:

$("#cb").bind("click", function(){...}); 

事件處理程序添加使用傳統DOM方法不叫:

document.getElementById("cb").addEventListener("click", function(){...}); 

最大的問題是爲什麼呢?有任何想法嗎?

p.s.對於「pageinit」和「pagebeforeshow」的事件處理程序,我也遇到類似的問題,只有通過「綁定」添加時才能接收。這些事件不是作爲DOM事件觸發的嗎?

[編輯]

這是一個完整的測試用例(link to jsfiddle):

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>My Page</title> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.css" /> 
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
    <script src="http://code.jquery.com/mobile/1.1.1/jquery.mobile-1.1.1.min.js"></script> 
    <script> 
     $(document).ready(function() { 
      $("#cb").bind("click", function(){alert("Clicked by jquery")}); 
      document.getElementById("cb").addEventListener("click", function(){alert("Clicked by DOM")}); 
     }); 
    </script> 
</head> 
<body> 

<div data-role="page"> 
    <input type="checkbox" name="cb" id="cb" /> 
    <label for="cb">I am a checkbox</label> 
</div> 

</body> 
</html> 

[編輯2]

回答我的問題:因點擊似乎並不在使用jquery mobile css文件時可能會遇到,可能是因爲它在複選框上顯示了標籤。沒有使用CSS,一切都按預期工作。

[編輯3]

回答我的第二個問題,爲什麼我不能透過的addEventListener趕上「pageinit」等自定義事件:這是一個jquery bug

回答

0

據我知道的addEventListener只需要三個參數,而不是2,如:

/** 
* in DHTML 
* @param {String} type 
* @param {Function} listener 
* @param {Boolean} [useCapture] 
*/ 
window.addEventListener = function(type,listener,useCapture) {}; 

或者

/** 
* in DOMEvents 
* @param {String} type 
* @param {EventListener|Function} listener 
* @param {Boolean} [useCapture] 
*/ 
EventTarget.prototype.addEventListener = function(type,listener,useCapture) {}; 
+1

useCapture爲已選了好一陣子(見[MDN(HTTPS: //developer.mozilla.org/en-US/docs/DOM/element.addEventListener)),所以不能這樣做。儘管謝謝! – CodeSalad 2012-08-07 00:38:26

相關問題