2010-03-31 87 views
10

以下代碼適用於FF,Safari,Chrome。但IE瀏覽器給我的問題。IE未檢測到複選框的jquery更改方法

當複選框被選中,我不能讓IE瀏覽器檢測到它。

$("#checkbox_ID").change(function(){ 

    if($('#'+$(this).attr("id")).is(':checked')) 
    { 
     var value = "1"; 
    } 
    else 
    { 
     var value = "0"; 
    } 
    alert(value); 

    return false; 
}); 

簡單地說,我沒有如預期那樣得到那個警報彈出。
我甚至嘗試了這種方式:

$("#checkbox_ID").change(function(){ 

    if($('#'+$(this).attr("id")'+:checked').attr('checked',false)) 
    { 
     var value = "1"; 
    } 
    else 
    { 
     var value = "0"; 
    } 
    alert(value); 

    return false; 
}); 

下面是簡單的複選框輸入:<input class="prod" type="checkbox" name="checkbox_ID" id="checkbox_ID" value="1"/>

任何人都知道IE需要不同的jQuery的方法?或者我的代碼剛剛關閉?

回答

5

與IE7及以下注意到sblom你所需要的元素,模糊了這個動作射擊,更高版本的IE和其他瀏覽器不需要元素明確地失去焦點,只需更改應觸發此事件(如下面的示例所示)。

我相信你的問題可能是,你要訪問「值」變量,當它超出範圍。

$("#checkbox_ID").change(function(){ 
var value; 
if($(this).is(':checked')) 
{ 
    value = "1"; 
} 
else 
{ 
    value = "0"; 
} 
alert(value); 

return false; 
}); 

Here is a working preview,請注意,因爲你在函數的最後返回false時復位的複選框,以前的值,因爲你已經取消了點擊的效果。

6

如果你點擊別的地方點擊複選框後,它可能會工作。 IE很奇怪。

可以嘗試類似:

$(function() { 
    if ($.browser.msie) { 
    $('input:checkbox').click(function() { 
     this.blur(); 
     this.focus(); 
}); 

此處瞭解詳情:http://norman.walsh.name/2009/03/24/jQueryIE

+0

我知道這是沒有意義的點(看看我在那裏做了什麼?:P),因爲我確定這只是OP測試他們的代碼。但是,由於您將blur/focus命令映射到點擊操作,要觸發更改操作,在這種情況下使用點擊操作沒有意義嗎?或者如果你真的覺得這是必要的,你應該叫$(this).trigger('change'); – Jay 2010-03-31 04:08:31

+0

這個想法對我很好。我在原型中使用它... if(Prototype.Browser.IE) { el.observe('click',function(e){ e。。元素()模糊(); e.element()。focus(); }); } – apinstein 2010-07-12 13:54:14

1

更改事件只有當控制後的值的變化失去焦點火災。對於複選框,最好連接到點擊事件。

下面是當onchange事件觸發的文檔:link text

+0

Click事件不是_quite_與更改相同。它通常非常接近,所以可以正常工作。但是,如果真的發生了真正的變化,就可以通過IE瀏覽器強制更改的點擊來實現點擊。 – sblom 2010-03-31 03:41:32

+1

以下是有關更改事件的更多信息。 http://www.quirksmode.org/dom/events/change.html。 – R0MANARMY 2010-03-31 03:42:57

+0

在所有情況下都不是這樣,請參閱下面的jQuery API文檔引用。 「 」對於選擇框,複選框和單選按鈕,當用戶使用鼠標進行選擇時,會立即觸發事件,但對於其他元素類型,事件將延遲到元素失去焦點。引自http://api.jquery.com/change/ – Jay 2010-03-31 04:02:17

1

您需要改用change事件的propertychange事件。請記住,propertychange事件將觸發非選中/未選中的事件。爲了彌補這一點,你必須檢查window.event.propertyName(用於IE只):

$(':checkbox').bind($.browser.msie ? 'propertychange': 'change', function(e) { 
    if (e.type == "change" || (e.type == "propertychange" && window.event.propertyName == "checked")) { 
     // your code here 
    } 
}); 
+0

這打破了IE9 +。需要檢查IE8及以下版本的瀏覽器版本。 – Muhd 2012-09-21 21:46:22

0

嘗試使用

jQuery('#checkbox').click(handleFunc); 

,而不是事件「改變」