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我找到了一個解決方案,但我需要解決事件的功能問題,而不是調用觸發器。
可能的解決方案通過重寫觸發方式:
(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);
如果我這樣做主叫正常事件的時候,我有錯誤的值 – 2010-08-30 16:34:47
是我不好,沒有檢查。但是當你的第二個例子正常工作時,爲什麼要重寫觸發器方法呢?爲什麼它必須在事件功能中發生? – Nalum 2010-08-31 09:03:57
對我來說,這將是方法觸發器更正常的行爲。我可能錯了 – 2010-09-06 13:54:44