jQueryモバイルを使用して、次のような単純なチェックボックスにクリックイベントハンドラーを登録しようとしています:
<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(){...});
大きな疑問はなぜですか?何か案は?
ps "pageinit" と "pagebeforeshow" のイベント ハンドラーにも同様の問題があり、"bind" を介して追加されたときに受け取ることができます。これらのイベントは DOM イベントとして発生しませんか?
[編集]
完全なテストケースは次のとおりです ( 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 モバイル css ファイルを使用しているときにクリックが行われないようです。CSS を使用しなくても、すべてが期待どおりに機能します。
[編集 3]
私自身の 2 番目の質問に答えます。addEventListener を介して「pageinit」やその他のカスタム イベントをキャッチできないのはなぜですか。これはjQuery のバグです。