Принудительное событие в JQuery - PullRequest
13 голосов
/ 09 августа 2009

Для всех;

Я создал счетчик вверх и вниз для десятичных разрядов, и когда происходит изменение, он заставляет событие размытия пересчитать поля со следующим кодом:

$('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, но затягивает в других, особенно в IE - предложения по созданию более чистого и быстрого.

Bob

Ответы [ 5 ]

29 голосов
/ 10 августа 2009

Официальный способ вызова / принудительного вызова события:

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

Но я не уверен, что это то, что вам поможет.

5 голосов
/ 09 августа 2009

Вы смешиваете вызовы jQuery и DOM, вам действительно следует избегать этого.

Создайте специальные обработчики для кнопок «Вниз» и «Вверх» (используя теги ID или теги классов), а затем измените значение значения калькулятора, вызвав jQuery $("#calculator").val(decPlaces + 1);

0 голосов
/ 09 июня 2013

Самый простой способ - просто вызвать событие change () после изменения вашего значения!

Например, если вы напишите

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

это должно работать!

0 голосов
/ 04 февраля 2010

Я ненавижу нечитаемый код, поэтому я просто отформатировал его для вас :)

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 голосов
/ 11 августа 2009

После просмотра некоторых полезных комментариев я внес следующие изменения:

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

Кнопки вверх-вниз, которые увеличивают или уменьшают десятичную настройку, все еще не очень отзывчивы в IE.

FYI - вызов функции autoNumeric для созданного мной плагина, который выполняет цифровое форматирование на лету.

Еще раз спасибо.

Боб

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...