jQueryの「on」関数は、将来作成される要素のイベントをキャッチすることになっていますが、私のコードでは、アイテムが既に作成されていない限り機能しないようです。失敗するコードは次のとおりです。
<!doctype html>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function () {
$('#div1').on('click', function(e) {
$('#div2').html('<div id="div3">Now Click Me!</div>');
});
$('#div3').on('click', function(e) { alert('OLA!'); });
});
</script>
</head>
<body>
<div id='div1' style='border:black 1px solid; background:yellow'>CLICK ME</div>
<div id='div2' />
</body>
</html>
「div2」をクリックすると「div3」が作成されますが、「div3」をクリックしても何も起こりません。一方、JavaScript コードを次のように変更すると、次のようになります。
$(function () {
$('#div1').on('click', function(e) {
$('#div2').html('<div id="div3">Now Click Me!</div>');
$('#div3').on('click', function(e) { alert('OLA!'); });
});
});
それは機能しますが、div3要素が追加された後に「div3」のイベントハンドラーが宣言されていないため、機能します。おそらく、「on」がどのように機能するかを誤解していますか?