0

我有 3 个复选框,需要用户一次最多选择一个,所以有一个代码,每次用户选择我的一个复选框。我取消选择所有其他并使用以下命令检查选定的一个:

$('input.myclass').click(function () {
    $('input.myclass:checked').not(this).removeAttr('checked');
});

在此代码下方,我还获得了选中复选框的值并将其显示在页面上的某个位置(为简单起见,让它保持警惕)。为此,我正在使用:

var sFilter = "";
$('input.myclass[type=checkbox]').each(function () {
    sFilter = sFilter + (this.checked ? $(this).val() : "");
});

现在,发生的事情sFilter总是最近选中的复选框和最后选中的复选框。比如:如果我有复选框 1、2、3。最初,当我选择复选框 2 时,我在警报中得到 2,但是当我选择 3 时,我得到 2,3。我认为这里发生的事情是代码通过具有特定类的所有复选框,考虑到我刚刚使用函数checked清除/取消选中,它仍然认为我有复选框 2。click

有人对我如何解决这个问题有建议吗?

谢谢

注意:由于用户界面,不能使用单选按钮。

4

2 回答 2

2

一种可能的解决方案是在这些复选框的单击事件上循环遍历这些复选框。

即使您在单击按钮时循环浏览它们,您也会没事的。

检查这个 Jsfiddle- http://jsfiddle.net/LMgFz/

$('input.myclass').click(function () {
$('input.myclass:checked').not(this).removeAttr('checked');
 var sFilter = "";
$('input.myclass[type=checkbox]').each(function () {
    sFilter = sFilter + (this.checked ? $(this).val() : "");
});
alert(sFilter);
});

如果有意义?

于 2013-09-12T13:51:41.303 回答
1

为什么不尝试这样的事情(这里是jsFiddle):

var sFilter = "";

$('input.myclass').click(function () {
    $('input.myclass:checked').not(this).removeAttr('checked');
    sFilter = (this.checked ? $(this).val() : "");
    alert(sFilter);
});

每次单击时,您都会更新sFilter,然后随心所欲地使用它。

如果您不想在取消选择时“提醒”,请尝试以下操作:

var sFilter = "";

$('input.myclass').click(function () {
    $('input.myclass:checked').not(this).removeAttr('checked');
    sFilter = (this.checked ? $(this).val() : "");
    if (sFilter != "") alert(sFilter);
});
于 2013-09-12T13:58:29.727 回答