Forcer un événement dans jQuery

À tous;

J’ai créé un compteur de haut en bas pour les décimales et lorsqu’un changement survient, je le force à forcer un événement de flou pour recalculer les champs avec le code suivant:

$('button').click(function(){ var decPlaces = document.calculator.dpv.value * 1; var hii = document.calculator.origin.value; if (this.id == 'up' && decPlaces  0){ document.calculator.dpv.value = decPlaces - 1; if (hii != ''){ document.calculator[hii].focus(); document.calculator[hii].blur(); } } 

Fonctionne bien dans FF mais traîne dans d’autres particulièrement IE – suggestions pour rendre le plus propre et plus rapide est apprécié.

Bob

Le moyen jQuery officiel pour déclencher / forcer un événement est

 $("selector").sortinggger("blur"); $("selector").sortinggger("focus"); 

Mais je ne suis pas sûr que c’est ce qui vous aidera.

Vous mélangez des appels jQuery et DOM, vous devriez vraiment éviter de le faire.

Créez des gestionnaires spécifiques pour les boutons Bas et Haut (en utilisant des balises ID ou des balises de classe), puis modifiez la valeur de votre calculasortingce en appelant jQuery $("#calculator").val(decPlaces + 1);

Je déteste le code illisible, je l’ai donc formaté pour vous 🙂

 jQuery(function($) { $("button").bind("click", function(e){ var decPlaces = $('#dpv').val() * 1; var hi1 = $('#origin').val(); if (this.id == 'up' && decPlaces < 5){ $('#dpv').val(decPlaces + 1); if (hi1 != ''){ $('#' + hi1).trigger("blur"); } } if (this.id == 'down' && decPlaces > 0){ $("#dpv").val(decPlaces - 1); if (hi1 != ''){ $('#' + hi1).sortinggger("blur"); } } }); $('input.auto').focus(function(){ if (this.id != 'dpv'){ $(this).parent().addClass("curFocus") } }); $('.clearAll').focus(function(){ $('.clearAll').val(""); }); $('input.auto').blur(function(){ $(this).parent().removeClass("curFocus") var sqft = 10.76391041670972192890; //square feet per square meter var lbs = 2.20462262184877566540; //pounds per kilo var bwiv = ''; var sfiv = ''; var bwmv = ''; var smmv = ''; $('#origin').val(this.id); if((this.id == 'bwi' || this.id == 'sfi') && this.value != ''){ // imperial if(this.id == 'bwi'){ bwiv = $.fn.autoNumeric.Ssortingp(this.id); sfiv = (3000 / bwiv); $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); } if(this.id == 'sfi'){ sfiv = $.fn.autoNumeric.Ssortingp(this.id); bwiv = (3000 / sfiv); $('#bwi').val($.fn.autoNumeric.Format('bwi', bwiv)); } bwmv = (((bwiv / lbs) / (3000 / sqft)) * 1000); smmv = (1000 / bwmv); $('#bwm').val($.fn.autoNumeric.Format('bwm', bwmv)); $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); } if((this.id == 'bwm' || this.id == 'smm') && this.value != ''){ //mesortingc if(this.id == 'bwm'){ bwmv = $.fn.autoNumeric.Ssortingp(this.id); smmv = (1000 / bwmv); $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); } if(this.id == 'smm'){ smmv = $.fn.autoNumeric.Ssortingp(this.id); bwmv = (1000 / smmv); $('#bwm').val($.fn.autoNumeric.Format('bwm', bwmv)); } bwiv = ((((bwmv / 1000) * lbs) / sqft) * 3000); sfiv = (3000 / bwiv); $('#bwi').val($.fn.autoNumeric.Format('bwi', bwiv)); $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); } }); 

});

Après avoir lu certains des commentaires utiles, j’ai apporté les modifications suivantes:

 jQuery(function($) { $("button").bind("click", function(e){ var decPlaces = $('#dpv').val() * 1; var hi1 = $('#origin').val(); if (this.id == 'up' && decPlaces < 5){ $('#dpv').val(decPlaces + 1); if (hi1 != ''){ $('#' + hi1).trigger("blur"); } } if (this.id == 'down' && decPlaces > 0){ $("#dpv").val(decPlaces - 1); if (hi1 != ''){ $('#' + hi1).sortinggger("blur"); } } }); $('input.auto').focus(function(){ if (this.id != 'dpv'){ $(this).parent().addClass("curFocus") } }); $('.clearAll').focus(function(){ $('.clearAll').val(""); }); $('input.auto').blur(function(){ $(this).parent().removeClass("curFocus") var sqft = 10.76391041670972192890; //square feet per square meter var lbs = 2.20462262184877566540; //pounds per kilo var bwiv = ''; var sfiv = ''; var bwmv = ''; var smmv = ''; $('#origin').val(this.id); if((this.id == 'bwi' || this.id == 'sfi') && this.value != ''){ // imperial if(this.id == 'bwi'){ bwiv = $.fn.autoNumeric.Ssortingp(this.id); sfiv = (3000 / bwiv); $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); } if(this.id == 'sfi'){ sfiv = $.fn.autoNumeric.Ssortingp(this.id); bwiv = (3000 / sfiv); $('#bwi').val($.fn.autoNumeric.Format('bwi', bwiv)); } bwmv = (((bwiv / lbs) / (3000 / sqft)) * 1000); smmv = (1000 / bwmv); $('#bwm').val($.fn.autoNumeric.Format('bwm', bwmv)); $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); } if((this.id == 'bwm' || this.id == 'smm') && this.value != ''){ //mesortingc if(this.id == 'bwm'){ bwmv = $.fn.autoNumeric.Ssortingp(this.id); smmv = (1000 / bwmv); $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); } if(this.id == 'smm'){ smmv = $.fn.autoNumeric.Ssortingp(this.id); bwmv = (1000 / smmv); $('#bwm').val($.fn.autoNumeric.Format('bwm', bwmv)); } bwiv = ((((bwmv / 1000) * lbs) / sqft) * 3000); sfiv = (3000 / bwiv); $('#bwi').val($.fn.autoNumeric.Format('bwi', bwiv)); $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); } }); }); 

Les boutons haut / bas qui augmentent ou diminuent le nombre décimal ne sont toujours pas très réactifs dans IE.

FYI – L’appel de la fonction autoNumeric s’applique à un plugin que j’ai créé et qui effectue le formatage numérique à la volée.

Merci encore.

Bob

Le moyen le plus simple consiste à déclencher un événement change () après avoir modifié votre valeur!

Par exemple, si vous écrivez

 $('selector').text('I am changing some text').change(); 

Cela devrait fonctionner!