2009-08-09 16 views
13

An alle;Erzwinge ein Ereignis in jQuery

Ich habe für Dezimalstellen eines Auf- und Abwärtszähler erstellt und wenn eine Änderung auftritt, ich habe es eine Unschärfe Ereignis zwingt Felder mit dem folgenden Code neu zu berechnen:

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

Arbeiten gut in FF aber schleppt in anderen vor allem IE - Vorschläge zur Herstellung der Reiniger und schneller wird geschätzt.

Bob

+2

Können Sie auch die Unschärfe-/Fokusereignisse anzeigen. – redsquare

Antwort

5

Sie mischen jQuery und DOM ruft, sollten Sie wirklich vermeiden, dass zu tun.

spezifische Handler für die Up- und Down-Tasten erstellen (entweder durch ID-Tags oder Klasse-Tags) und dann den Wert Ihres Rechners Wert ändern, indem Sie die jQuery-Aufruf $("#calculator").val(decPlaces + 1);

+0

Danke für die Hilfe –

29

Die offizielle jquery Weg auslösen/erzwingen ein Veranstaltung ist

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

Aber ich bin nicht sicher, ob dies ist, was wird Ihnen helfen.

+0

Vielen Dank an alle, die Sie eine große Hilfe waren. –

+1

Perfekte Antwort auf den Titel der Frage. <3 Google + StackOverflow. Für diejenigen, die zu faul für Google sind, finden Sie die JQuery-Dokumentation für .trigger() unter http://api.jquery.com/trigger/ –

0

Nachdem ich einige der hilfreichen Kommentare zu sehen, habe ich folgende Änderungen vorgenommen haben:

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).trigger("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.Strip(this.id); 
       sfiv = (3000/bwiv); 
       $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); 
      } 
      if(this.id == 'sfi'){ 
       sfiv = $.fn.autoNumeric.Strip(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 != ''){ //metric 
      if(this.id == 'bwm'){ 
       bwmv = $.fn.autoNumeric.Strip(this.id); 
       smmv = (1000/bwmv); 
       $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); 
      } 
      if(this.id == 'smm'){ 
       smmv = $.fn.autoNumeric.Strip(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)); 
     } 
    }); 
}); 

Die nach oben nach unten Tasten, die die Dezimaleinstellung sind noch nicht sehr reaktionsschnell in IE erhöhen oder verringern.

FYI - die AutoNumeric Funktionsaufruf ist zu einem Plugin, das ich erstellt, dass numerische Formatierung im laufenden Betrieb macht.

Nochmals vielen Dank.

Bob

0

ich unlesbar Code hassen, so dass ich formatiert nur, dass Sie :)

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).trigger("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.Strip(this.id); 
       sfiv = (3000/bwiv); 
       $('#sfi').val($.fn.autoNumeric.Format('sfi', sfiv)); 
      } 
      if(this.id == 'sfi'){ 
       sfiv = $.fn.autoNumeric.Strip(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 != ''){ //metric  
      if(this.id == 'bwm'){ 
       bwmv = $.fn.autoNumeric.Strip(this.id); 
       smmv = (1000/bwmv); 
       $('#smm').val($.fn.autoNumeric.Format('smm', smmv)); 
      } 
      if(this.id == 'smm'){ 
       smmv = $.fn.autoNumeric.Strip(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)); 
     } 
}); 

});

0

Der einfachste Weg ist, ein change() Ereignis auszulösen, nachdem Sie Ihren Wert geändert haben!

Zum Beispiel, wenn Sie

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

schreiben, das sollte funktionieren!