2010-12-10 24 views
0

Je crée un élément d'entrée avec des événements de focus et de flou via jQuery. Pour une raison quelconque, même si l'élément d'entrée est affiché, les événements ne se déclenchent pas. Voici un exemple http://jsfiddle.net/9JtLq/8/Les événements ne se déclenchent pas (dans les navigateurs non IE) lors de l'ajout dynamique d'éléments html via jQuery

Cela fonctionne dans IE7 & IE8. Cela ne fonctionne pas dans Firefox, Safari ou Chrome. Pourquoi?

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

par tous signifie utiliser jsFiddle et comme un * adjunct * à votre question, mais toujours mettre le code * dans * la question. SO devrait être autonome (les ressources externes peuvent disparaître), et les personnes qui cherchent à vous aider ne devraient pas avoir à suivre le lien pour le faire (bien qu'elles puissent choisir de le faire). –

+0

bon point. terminé. –

Répondre

1

vous devez lier l'événement après que vous ajoutez

$(".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/


Si vous utilisez jQuery 1.4.1+ vous pouvez vivre lier flou et de se concentrer, ce qui signifie tous les éléments actuels et futurs qui correspondent sera lié à l'événement (s)

$(".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

De plus, si vous utilisez une version de jQuery qui ne supporte pas '.live', vous avez le plugin liveQuery: http://plugins.jquery.com/project/livequery – jgradim

+0

Pourquoi dois-je lier l'événement après l'ajout? il? Aussi j'ai mis à jour la question, le code original fonctionne dans IE7 et IE8 mais pas dans d'autres navigateurs. –

+0

Je suppose que jQuery ne peut pas se lier aux événements qui n'existent pas encore, sauf si vous utilisez l'événement 'live()'. IE7 et IE8 peuvent interagir différemment. Si vous utilisez 'live()', vous devriez être prêt à partir. – hunter