2009-08-09 13 views
13

Herkese;jQuery'de bir olay zorla

Ben ondalık basamağa sayacı bir yukarı ve aşağı oluşturduk ve bir değişiklik gerçekleştiğinde bunu aşağıdaki kodla alanları yeniden hesaplamak için bir bulanıklık olay zorlamak vardır:

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

FF iyi Çalışır, ancak diğerlerinde sürükler özellikle IE - temizleyici ve daha hızlı yapma önerileri takdir edilmektedir.

Bob jQuery ve DOM çağırır karıştırma ediyoruz

+2

Ayrıca bulanıklık/odak olaylarını da gösterebilir misiniz? – redsquare

cevap

5

, gerçekten bunu yaparken kaçınmalıdır.

(ID etiketleri veya sınıf etiketini kullanarak) Aşağı ve Yukarı düğmeleri için belirli işleyicileri oluşturun ve sonra tetiklemek için resmi jquery yolu jQuery $("#calculator").val(decPlaces + 1);

+0

Yardım için teşekkürler –

29

arayarak hesap değerinin değerini değiştirmek/Bir zorlamak olay

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

olduğunu Ama bu size yardımcı olacaktır budur emin değilim. Aşağıdaki değişiklikler yaptık yararlı bazı yorumlar gördükten sonra

+0

Hepinize çok yardımcı oldunuz. –

+1

Sorunun başlığına mükemmel cevap. <3 Google + StackOverflow. Google’da çok tembel olanlar için .trigger() 'ın JQuery belgeleri http://api.jquery.com/trigger/ adresindedir. –

0

:

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

yukarı aşağı IE'deki çok duyarlı değildir artırmak veya ondalık ayarını azaltın düğmeleri.

FYI - autoNumeric işlev çağrısı, oluşturduğum bir eklentinin, anında sayısal biçimlendirmenin yapacağı bir eklentidir.

Tekrar teşekkürler.

Bob

0

Ben okunmaz kodu nefret, bu yüzden sadece biçimlendirilmiş bunun için :)

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

En kolay yol, yalnızca değerinizi değiştirdikten sonra bir change() olayını tetiklemektir!

Örneğin, yazarsanız

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

çalışması gerektiğini!