2009-08-09 26 views
13

Do wszystkich;Wymuś zdarzenie w jQuery

Stworzyłem w górę iw dół licznik miejsc po przecinku, a kiedy następuje zmiana mam go zmusić zdarzenie rozmycia przeliczyć pól z następującego kodu:

$('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(); 
     } 
    } 

działa dobrze w FF, ale ciągnie w innych w szczególności IE - docenia się sugestie dotyczące upiększania i szybszego czyszczenia.

Bob

+2

Możesz również wyświetlać zdarzenia związane z rozmyciem/ostrością. – redsquare

Odpowiedz

5

Ty mieszania jQuery i DOM nazywa, naprawdę powinieneś unikać robić.

Tworzenie konkretnych teleskopowe na przycisków w górę iw dół (przy użyciu zarówno identyfikatory lub znaczniki klasy), a następnie zmienić wartość swojej wartości kalkulatora poprzez wywołanie jQuery $("#calculator").val(decPlaces + 1);

+0

Dzięki za pomoc –

29

Oficjalna sposób jquery wyzwolić/wymusić impreza

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

Ale nie jestem pewien, że to, co pomoże.

+0

Dzięki temu jesteś bardzo pomocny. –

+1

Doskonała odpowiedź na tytuł pytania. <3 Google + StackOverflow. Dla tych zbyt leniwych dla Google dokumentacja JQuery dla .trigger() znajduje się pod adresem http://api.jquery.com/trigger/ –

0

Po obejrzeniu niektórych pomocnych uwag, jakie poczynił następujące zmiany:

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)); 
     } 
    }); 
}); 

Do góry na dół przyciski, które zwiększają lub zmniejszają ustawienie dziesiętną nadal nie są bardzo czułe w IE.

FYI - Wywołanie funkcji autoNumeric jest związane z utworzoną przeze mnie wtyczką, która formatuje numerycznie w locie.

Jeszcze raz dziękuję.

Bob

0

Nienawidzę kod nieczytelny, więc po prostu sformatowane, że dla ciebie :)

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

Najprostszym sposobem jest wyzwolenie zdarzenia change() po zmianie wartości!

Na przykład, jeśli piszesz

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

że powinno działać!