2010-12-10 11 views
0

jQueryを使用してフォーカスおよびブラーイベントを持つ入力要素を作成しています。何らかの理由で入力要素が表示されても、イベントは発生しません。ここに例がありますhttp://jsfiddle.net/9JtLq/8/jQueryを介してhtml要素を動的に追加すると、(IE以外のブラウザでも)イベントが発生しません。

これはIE7で動作します& IE8。 Firefox、Safari、Chromeでは動作しません。どうして?

HTML

<div> 
    Try to focus from one input to another. 
</div> 

<div class="placeholder"/> 

<div class="placeholder"/> 

<div id="output" /> 

のjavascript:あなたが追加した後にイベントをバインドする必要があり

var input_box = $("<input type=\"text\" />") 
.focus(function() 
{ 
     $("#output").html($("#output").text() + "focus - "); 
}) 
.blur(function() 
{ 
     $("#output").html($("#output").text() + "blur - "); 
}); 


$(".placeholder").append(input_box); 
+3

*あなたの質問に* adjunct *などのjsFiddleを使うことを意味しますが、常にコードに*を入れてください。 SOは独立していなければなりません(外部リソースは消える可能性があります)。あなたを助けようとしている人々は、そうするためにリンクをたどる必要はありません。 –

+0

良い点。完了しました。 –

答えて

1

$(".placeholder").append("<input type=\"text\" />"); 

$(".placeholder input:text").focus(function() { 
    $("#output").html($("#output").text() + "focus - "); 
}).blur(function() { 
    $("#output").html($("#output").text() + "blur - "); 
}); 

http://jsfiddle.net/9JtLq/9/


0123すべてのことで

あなたはイベント(複数可)にバインドされます一致するすべての現在および将来の要素を意味し、バインドブラーとフォーカスを生きることができる1.4.1+のjQueryを使用している場合

$(".placeholder input:text").live("focus", function() { 
    $("#output").html($("#output").text() + "focus - "); 
}).live("blur", function() { 
    $("#output").html($("#output").text() + "blur - "); 
}); 

http://jsfiddle.net/9JtLq/10/

+0

また、 '.live'をサポートしていないjQueryバージョンを使用している場合、liveQueryプラグインがあります。http://plugins.jquery.com/project/livequery – jgradim

+0

なぜ、追加した後にイベントをバインドする必要がありますかそれ?また、私は質問を更新しました。元のコードはIE7とIE8では動作しますが、他のブラウザでは動作しません。 –

+0

'live()'イベントを使用しない限り、jQueryはまだ存在しないイベントにバインドできないと仮定しています。 IE7とIE8は異なったやり取りをするかもしれません。あなたが 'live()'を使うなら、あなたは良いことがあるはずです。 – hunter

関連する問題