2010-03-31 64 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); 

,而不是事件“改变”