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