4 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
初始代碼如下:
復(fù)制代碼代碼如下:
$(function(){
$("#ischange").change(function() {
alert("checked");
});
});
搗騰了半天,竟然一點(diǎn)反應(yīng)都沒有。百度了下,有高人指出上面幾行代碼在Firefox等瀏覽器中可以正常運(yùn)行,即你選中復(fù)選框或取消復(fù)選框都會(huì)彈出一個(gè)對話框,但是在IE中卻不會(huì)正常執(zhí)行,即選中或取消復(fù)選框不會(huì)立即彈出對話框。
必須在選中或取消復(fù)選框之后再點(diǎn)擊除了復(fù)選框之外的任何一個(gè)地方,據(jù)說是因?yàn)镮E會(huì)等到復(fù)選框失去焦點(diǎn)之后才會(huì)觸發(fā)change事件。
改進(jìn)之后的代碼如下:
復(fù)制代碼代碼如下:
$(function(){
if ($.browser.msie) {
$('input:checkbox').click(function () {
this.blur();
this.focus();
});
};
$("#ischange").change(function() {
alert("checked");
});
});
補(bǔ)充:當(dāng)改變復(fù)選框的值后,IE在等待失去焦點(diǎn),但是click事件是立即觸發(fā)的,因此利用click事件讓復(fù)選框失去焦點(diǎn),這樣就會(huì)觸發(fā)chang事件了,然后再把焦點(diǎn)重新轉(zhuǎn)移到該復(fù)選框上。
如果是radio,將checkbox換成radio即可。
在JQuery中,當(dāng)給radio或checkbox添加一個(gè)change事件時(shí),如果它的值發(fā)生變化就會(huì)觸發(fā)change事件,就如同我們在 HTML中寫入下代碼:
復(fù)制代碼代碼如下:
<input type="checkbxo" id="testCheckbox" onchange="myfunction()"name="fruits">,
而我們用JQuery的代碼如下:
復(fù)制代碼代碼如下:
$(document).ready(function(){
$("testCheckbox").change(function() {
alert("Option changed!");
});
});
以上代碼在Firefox等瀏覽器中可以正常運(yùn)行,即當(dāng)你選中復(fù)選框或取消復(fù)選框都會(huì)彈出一個(gè)對話框,但是在IE中卻不會(huì)正常執(zhí)行,即你選中或取消復(fù)選框不會(huì)立即彈出對話框,你必須在選中或取消復(fù)選框之后再點(diǎn)擊除了復(fù)選框之外的任何一個(gè)地方,之所以這樣,據(jù)說是因?yàn)镮E會(huì)等到復(fù)選框失去焦點(diǎn)之后才會(huì)觸發(fā)change事件,目前這個(gè)問題還沒有被修復(fù),不過網(wǎng)上有高人已經(jīng)提供了解決方案:
復(fù)制代碼代碼如下:
$(function () {if ($.browser.msie) {$('input:checkbox').click(function () { this.blur(); this.focus(); }); }});
以上代碼只要把checkbox就可以適用于radio, 以上代碼的原理是:當(dāng)改變復(fù)選框的值后,IE在等待失去焦點(diǎn),但是click事件是立即觸發(fā)的,因此利用click事件讓復(fù)選框失去 焦點(diǎn),這樣就會(huì)觸發(fā)chang事件了,然后再把焦點(diǎn)重新轉(zhuǎn)移到該復(fù)選框上。有人可能會(huì)問為什么不直接用click事件來代替change事件,對于checkbox來說,click事件和change都可以完成同樣的功能,但是對于radio來說就不一樣了,你可以連續(xù)點(diǎn)擊同一個(gè)radio而值不變,這時(shí)就會(huì)不停的觸發(fā)click事件而不會(huì)觸發(fā)change事件。
添加回答
舉報(bào)