jQuery addClass()在IE中不起作用(8,9,也可能是另一个)

时间:2011-08-18 14:45:18

标签: jquery css internet-explorer

简单的html:

<div class="stuff-choice">
  <div class="item a">
    <label class="signup-checkbox">
      <input type="checkbox" value="a" name="stuff[a][]" id="stuff_choice_" class="things">
      <strong>A</strong>
    </label>
  </div>
</div>

基本上我检测到有人点击了css类.things的复选框,然后我用css类<div>更新了父.selected

JS :(带有$(document).ready(function(){ ...

$('.things').click(function() {     
    item = $(this).closest("div");
    if ($(this).attr('checked') != null)
        $(item).addClass('selected');
    else
        $(item).removeClass('selected');
});

这就像下面的魅力: - Safari(mac&amp; win) - Firefox(mac&amp; win)

但不是在IE下!?!?

我不知道为什么......

谢谢,

亚历

4 个答案:

答案 0 :(得分:4)

如果你没有通过在“var”前面添加变量来声明你的变量,IE就会因为吓坏而臭名昭着。

所以试试这个:

var item = $(this).closest("div");

答案 1 :(得分:2)

试试这个,closest已经提供了一个jQuery对象,你没有把它包装在$()中,并且is()方法也可以用于检查是否被检查。

$('.things').click(function() {     
    $item = $(this).closest("div");
    if ($(this).is(':checked'))
        $item.addClass('selected');
    else
        $item.removeClass('selected');
});

答案 2 :(得分:0)

我认为你的问题是你正在调用的对象.addClass

item = $(this).closest("div");

在这一行中,item被设置为jQuery对象。

因此,在您的下一个声明中,您不需要$(item)语法,只需使用item

$('.things').click(function() {     
    item = $(this).closest("div");
    if ($(this).attr('checked') != null)
        item.addClass('selected');
    else
        item.removeClass('selected');
});

答案 3 :(得分:0)

我使用.prop('禁用','禁用')而不是addClass('hide') - 它对我有效。

相关问题