找到多个选择器不一致的奇怪行为

时间:2012-12-20 16:26:00

标签: jquery radio-button

我有一张每行都有radio的表格。我希望为selected设置tr的课程selected radio

所以我这样做了:

$(":radio[name='grp']").on("change", function() {
    $("#tbl1").find("tr.selected, tr:has(:radio:checked)").toggleClass("selected");
});

当您从底部到顶部开始检查radios时,效果很好。但是,如果你从顶部到底部开始,它可以工作一次,那么它就不会工作一次,依此类推。

我可以在没有find功能的情况下隔离代码很有效:

$(":radio[name='grp2']").on("change", function() {
    $("#tbl2 tr.selected, #tbl2 tr:has(:radio:checked)").toggleClass("selected");
});

Here there is a fiddle for you to test it

这里发生了什么?

更新:我还注意到问题出在find方法上,因为当它工作时,它总是会返回一个长度为2的jQuery对象。 #39;工作,返回长度为1.但是,如果我用分隔的句子中的两个find,它们都返回长度为1且来自不同的元素。

3 个答案:

答案 0 :(得分:2)

:radio已被弃用,您可以在此处看到http://api.jquery.com/category/deprecated/

您应该使用input[type=radio]来获取单选按钮

使用input[type=radio]完美无缺

http://jsfiddle.net/kLk6J/

答案 1 :(得分:0)

以下是您需要做的事情 -

$(":radio[name='grp']").on("change", function() {
    $("#tbl1").find("tr").removeClass("selected");
    $(this).parents("tr").addClass("selected");
});

对于每个更改,您从所有行中删除所选类,然后将该类应用于相关单选按钮的父tr。通过切换,每次运行时都会打开和关闭课程,这不是你想要的。

答案 2 :(得分:-1)

 $("input[name='grp']")

 $("input[name='grp2']")