2011-03-31 39 views
1

有没有人有任何想法为什么这段代码似乎不工作? 我在做什么错?jquery复选框attr更改似乎不工作

使用JQuery 1.5.1。

JS代码:

$('#search_filters #discipline a').click(function(){ 

    var checkbox = $(this).next(':checkbox'); 

    if (checkbox.attr('checked')) { 
     checkbox.attr("checked", true); 
    } else { 
     checkbox.attr("checked", false); 
    } 

    $(this).children('img').toggleClass("active"); 

    return false; 
}); 

HTML:

<li> 
    <a href="#"> 
     <img class="inactive" alt="Football" src="/images/disciplines/e9bc7681813110c/thumb.png"> 
    </a> 
    <input type="checkbox" name="search_discipline[7]" value="1" class="search_discipline"> 
</li> 

回答

1

我刚碰到这个。看来在jQuery 1.5.1和1.5.2中设置checked属性是有点bug。我更喜欢$(':checkbox').val(boolean)(这更容易)。

更新:经过一番挖掘,似乎webkit检查器实际上并未在DOM中显示checked属性,但jQuery正确读取/写入它。很奇怪。为我的开发者提供夜间webkit构建服务。

1

的 “选中” 属性应该被 “选中” 的价值:

 
if (checkbox.is(':checked')) 
{ 
    checkbox.attr("checked", "checked"); 
} else { 
    checkbox.removeAttr("checked"); 
} 
+0

并非如此。要么会工作。退房:http://jsfiddle.net/nbjV5/。事实上,如果你警告($(“#test1”)。attr(“checked”));'你会得到'真'或'假' – 2011-03-31 10:36:51

1

只有两个有益的想法,以检查属性更改:

  • 首先编写纯HTML,不带Javascript。它有用吗?如果是这样,那么用JS编写它
  • 如果你修改了一个html标签,回想一下这个属性本身,那么你可以检查你的代码是否已经被很好地执行了。例如, alert($({your target object}).attr({the attribute which added}));

这就是我在大多数情况下所做的。

+0

addind alert()to:if(checkbox.attr('checked '))返回正确的值(true/false) – arekstasiewicz 2011-03-31 11:37:50

+0

我不添加'alert()'。这是一个单独的代码行。例如'alert($(“search_discipline [7]”)。attr(“type”))'会显示标签属性'name'的值。如果不是,那么'姓名'的处理就不成功。这种方式只是一个测试来验证我的代码。 – reporter 2011-03-31 12:16:15

0

一些指针:

  1. $('#search_filters #discipline a')将选择从#discipline#search_filters下降下降全都a元素。这是你的信念吗?

  2. 你还记得.next()返回一个兄弟姐妹。

  3. 如果您删除href='#'会发生什么情况?

  4. 您的点击事件是否会触发?

+0

1.是 2.是3. 一样witf HREF 4是 运行从Firebug的控制台脚本似乎做工精细 – arekstasiewicz 2011-03-31 11:33:39

+0

什么多少个对象在'checkbox' jQuery的集合在那里。 (检查'。长度属性)。另外,可能需要包含包含'#search_filters'和'#discipline' ID的HTML – 2011-03-31 11:48:30