2010-08-30 35 views
3

如何才能在click事件中通過觸發器調用正確的當前值?通過單擊事件調用方法「觸發器」時的複選框值

HTML:

<input type="checkbox" id="mycheck" /> 
<br /> 
<span id="actual-value-inevent"></span> 
<br /> 
<span id="actual-value"></span> 
<br /> 
<button id="view-value">view value</button> 
<br /> 
<button id="call-trigger">call trigger</button> 
<br /> 
<button id="call-trigger-handler">call trigger handler</button> 

的Javascript:

$('#mycheck').bind('click', function(ev) { 
    $('#actual-value-inevent').html('value in event : ' + $(this).is(':checked')); 
}); 

$('#view-value').bind('click', function(ev) { 
    $('#actual-value').html('value view : ' + $('#mycheck').is(':checked')); 
}); 

$('#call-trigger').bind('click', function(ev) { 
    $('#mycheck').trigger('click'); 
    $('#actual-value').html('value post trigger: ' + $('#mycheck').is(':checked')); 
}); 

$('#call-trigger-handler').bind('click', function(ev) { 

    $('#mycheck')[0].checked = !$("input")[ 0 ].checked; 
    $('#mycheck').triggerHandler('click'); 

    $('#actual-value').html('value post triggerHandler: ' + $('#mycheck').is(':checked')); 

}); 

如果我稱之爲 「觸發( '點擊')」,在事件的複選框的當前值是前點擊。

this blog我找到了一個解決方案,但我需要解決事件的功能問題,而不是調用觸發器。

example
example with solution

可能的解決方案通過重寫觸發方式:

​(function($){ 

    var triggerOverwrite = $.fn.trigger; 
    $.fn.trigger = function (eventType, extraParameters) { 

     var stringEvent = ''; 
     if (typeof eventType == 'string') 
      stringEvent = eventType; 
     else 
      stringEvent = eventType.type; 

     if (this.get(0).tagName.toLowerCase() == 'input' 
      && stringEvent == 'click' && $(this).attr('type') == 'checkbox') 
     { 
      $(this)[0].checked = !$(this)[0].checked; 
      return $(this).triggerHandler(stringEvent, extraParameters); 
     } 

     return triggerOverwrite.apply(this, arguments); 

    }; 


})(jQuery);​ 

run

回答

0

點擊進行任何更改之前運行應用於複選框的Click事件。

所以在你的複選框,單擊事件做到以下幾點:

$('#mycheck').bind('click', function(ev) { 
    $('#actual-value-inevent').html('value in event : ' + !$(this).is(':checked')); 
}); 
+0

如果我這樣做主叫正常事件的時候,我有錯誤的值 – 2010-08-30 16:34:47

+0

是我不好,沒有檢查。但是當你的第二個例子正常工作時,爲什麼要重寫觸發器方法呢?爲什麼它必須在事件功能中發生? – Nalum 2010-08-31 09:03:57

+0

對我來說,這將是方法觸發器更正常的行爲。我可能錯了 – 2010-09-06 13:54:44

相關問題