2009-08-09 39 views
13

Đối với tất cả;Bắt buộc sự kiện trong jQuery

tôi đã tạo ra một lên xuống truy cập cho chữ số thập phân và khi một sự thay đổi xảy ra tôi có nó buộc một sự kiện mờ để tính toán lại các lĩnh vực với đoạn mã sau:

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

trình tốt trong FF nhưng kéo người khác đặc biệt là IE - các đề xuất về việc làm sạch và nhanh hơn được đánh giá cao.

Bob

+2

Bạn cũng có thể hiển thị các sự kiện làm mờ/lấy nét hay không. – redsquare

Trả lời

5

Bạn đang trộn các cuộc gọi jQuery và DOM, bạn thực sự nên tránh thực hiện điều đó.

Tạo xử lý cụ thể đối với các nút Down và Up (bằng cách sử dụng một trong hai thẻ ID hoặc thẻ class) và sau đó thay đổi giá trị của giá trị máy tính của bạn bằng cách gọi jQuery $("#calculator").val(decPlaces + 1);

+0

Cảm ơn sự giúp đỡ –

29

Các jquery cách chính thức để kích hoạt/buộc một sự kiện này là

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

Nhưng tôi không chắc chắn đây là những gì sẽ giúp bạn.

+0

Nhờ tất cả các bạn đã giúp đỡ rất nhiều. –

+1

Câu trả lời hoàn hảo cho tiêu đề của câu hỏi. <3 Google + StackOverflow. Đối với những người quá lười biếng với Google, tài liệu JQuery cho .trigger() là tại http://api.jquery.com/trigger/ –

0

Sau khi nhìn thấy một số trong những ý kiến ​​hữu ích tôi đã thực hiện những thay đổi sau:

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

Các lên xuống nút tăng hoặc giảm các thiết lập số thập phân vẫn không phải là rất nhạy trong IE.

FYI - cuộc gọi chức năng tự độngNumeric là một plugin mà tôi đã tạo có định dạng số khi đang di chuyển.

Xin cảm ơn một lần nữa.

Bob

0

Tôi ghét mã không đọc được, vì vậy tôi chỉ được định dạng đó cho bạn :)

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

Cách dễ nhất là chỉ kích hoạt sự kiện change() sau khi bạn thay đổi giá trị của mình!

Ví dụ, nếu bạn viết

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

rằng nên làm việc!

Các vấn đề liên quan