377 votes

.Val() n ' t .change() de déclencheur dans jquery

Je suis en train de déclencher sur une zone de texte quand je change sa valeur simplement avec un bouton, mais cela ne fonctionne pas. Consultez [ce lien](http://jsbin.com/otove/edit). Si vous tapez quelque chose dans la zone de texte, puis cliquez sur un autre endroit déclencheurs, mais si vous cliquez sur uniquement bouton, il change de zone de texte valeur, mais `` ne se déclenche pas.

Pourquoi ?

515voto

GenericTypeTea Points 27689

``des incendies seules lorsque l’utilisateur tape dans l’entrée et ensuite l’entrée perd le focus.

Vous pouvez appeler manuellement la `` événement à l’aide après avoir réglé la valeur :

Vous pouvez également déclencher l’événement à l’aide :

67voto

Chris Fulstow Points 19762

De l’excellente suggestion de redsquare, cela fonctionne très bien :

31voto

Yaron U. Points 3278

Vous pouvez très facilement remplacer le val fonction pour déclencher un changement, en les remplaçant par un proxy à l'original val fonction.

il suffit d'ajouter Ce code quelque part dans votre document (après le chargement de jQuery)

(function($){
    var originalVal = $.fn.val;
    $.fn.val = function(){
        var result =originalVal.apply(this,arguments);
        if(arguments.length>0)
            $(this).change();
        return result;
    };
})(jQuery);

Un exemple: ici

(Notez qu'il sera toujours déclencher change lorsque val(new_val) , même si la valeur n'a pas réellement changé.)

Si vous voulez déclencher un changement UNIQUEMENT lorsque la valeur réellement changé, utilisez celui-ci:

//This will trigger "change" event when "val(new_val)" called 
//with value different than the current one
(function($){
    var originalVal = $.fn.val;
    $.fn.val = function(){
        var prev;
        if(arguments.length>0){
            prev = originalVal.apply(this,[]);
        }
        var result =originalVal.apply(this,arguments);
        if(arguments.length>0 && prev!=originalVal.apply(this,[]))
            $(this).change();
        return result;
    };
})(jQuery);

Exemple vivant pour que: http://jsfiddle.net/5fSmx/1/

15voto

Darin Dimitrov Points 528142

Non, vous devrez déclencher manuellement après avoir réglé la valeur :

ou :

9voto

Jay Godse Points 5157

Il semble que les événements ne sont pas en pleine effervescence. Essayez ceci :

J’espère que cette aide.

J’ai essayé juste une plaine vieux sans enregistrer l’ancienne valeur et le se déclenche même si la valeur n’a pas changé. C’est pourquoi j’ai sauvé la valeur précédente et appelé `` que si elle change.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X