Version jQuery 1.4.1jQuery focusIn et focusOut événements en direct ne se déclenchent pas
Je cherche à écrire un simple plugin de type filigrane et je veux profiter des événements en direct car tous les éléments que je besoin de l'utiliser sur existeront pendant le chargement de la page, ou ils peuvent être ajoutés et supprimés du DOM. Cependant, pour une raison quelconque, les événements ne se déclenchent jamais.
Voici le code qui ne travaillent pas:
; (function($) {
$.fn.watermark = function(text) {
return $(this).each(function() {
$(this).live('focusout', function() {
if (this.value == "") {
this.value = text;
}
return false;
});
$(this).live('focusin', function() {
if (this.value == text) {
this.value = "";
}
return false;
});
});
}
})(jQuery);
je peux obtenir ce travail sans utiliser des événements en direct. Ce code fonctionne:
; (function($) {
$.fn.watermark = function(text) {
return $(this).each(function() {
$(this).focusout(function() {
if (this.value == "") {
this.value = text;
}
return false;
});
$(this).focusin(function() {
if (this.value == text) {
this.value = "";
}
return false;
});
});
}
})(jQuery);
'$ (ce) .each' devrait être remplacé par' this.each' pour les mêmes raisons. – jAndy
@jAndy - En fait, il n'a pas besoin du '.each()' du tout, juste des sélecteurs en chaîne :) –
Quelque chose ne semble pas juste ici. Je pensais que vous devriez toujours utiliser return this.each? Voir: http://stackoverflow.com/questions/2678185/why-return-this-eachfunction-in-jquery-plugins –