3

我有一个表,radio每行都有一个。我想要一个selected有.trselected 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");
});

这里有一个小提琴供你测试

这里发生了什么事?

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

4

3 回答 3

2

:radio已被弃用,你可以在这里看到http://api.jquery.com/category/deprecated/

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

使用input[type=radio]完美

http://jsfiddle.net/kLk6J/

于 2012-12-20T16:48:19.657 回答
0

这是你需要做的 -

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

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

于 2012-12-20T16:44:28.680 回答
-1
 $("input[name='grp']")

 $("input[name='grp2']")
于 2012-12-20T16:43:58.553 回答