【问题标题】:Checkboxes below checked checkbox can't be checked选中复选框下方的复选框无法选中
【发布时间】:2017-02-02 20:28:25
【问题描述】:

您好,我在解决此问题时遇到问题。我有 4 个复选框,其中一次只能检查 1 个复选框。这意味着如果当前选中了第二个框并且我勾选了第一个框,那么应该删除第二个框的选中。

我的问题是,当我勾选一个复选框时,我不能再选中它下面的其他复选框。我需要先取消选中该框,然后它才能再次起作用。

这是我的 javascript

var a = $('.8kfth').val();
        $(':checkbox').on('click', this, function(){
            if ($('.8kfirstchk').prop('checked')==true && $('.8kfth').val()=="one")
            {
                $('.8ksecondchk, .8kthirdchk, .8kfourthchk').prop('checked', false);
                $('.ft-identifier').html('').append('8-K with 425');
            }
            else if ($('.8ksecondchk').prop('checked')==true && $('.8kfth').val()=="one")
            {
                $('.8kfirstchk, .8kthirdchk, .8kfourthchk').prop('checked', false);
                $('.ft-identifier').html('').append('8-K with DEFA14A or DFAN14A');
            }
            else if ($('.8kthirdchk').prop('checked')==true && $('.8kfth').val()=="one")
            {
                $('.8kfirstchk, .8ksecondchk, .8kfourthchk').prop('checked', false);
                $('.ft-identifier').html('').append('8-K with SC TO-C');
            }
            else if ($('.8kfourthchk').prop('checked')==true && $('.8kfth').val()=="one")
            {
                $('.8kfirstchk, .8ksecondchk, .8kthirdchk').prop('checked', false);
                $('.ft-identifier').html('').append('8-K with SC TO-C');
            }
        });

这是html

<P align=center><select class="8kfth"><option></option><option><value="one">one</option><option value="two">two</option></select></P>

<TABLE style="LINE-HEIGHT: 13pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width="100%" border=0>

<TR vAlign=bottom>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman"><input type="checkbox" class="8kfirstchk">&nbsp;&nbsp;</FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"><FONT face="Times New Roman" size=2>425</FONT></TD></TR>
<TR>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman">&nbsp;&nbsp;</FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"></TD></TR>
<TR vAlign=bottom>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman"><input type="checkbox" class="8ksecondchk"></FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"><FONT face="Times New Roman" size=2>PANDA</FONT></TD></TR>
<TR>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman">&nbsp;&nbsp;</FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"></TD></TR>
<TR vAlign=bottom>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman"><input type="checkbox"  class="8kthirdchk"></FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"><FONT face="Times New Roman" size=2>SCIENCE TO SCIENCE</FONT></TD></TR>
<TR>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman">&nbsp;&nbsp;</FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"></TD></TR>
<TR vAlign=bottom>
    <TD NOWRAP WIDTH="1%" STYLE="text-align: left; vertical-align: middle"><FONT size=2 face="Times New Roman"><input type="checkbox"  class="8kfourthchk"></FONT></TD>
    <TD WIDTH="99%" STYLE="text-align: left; vertical-align: middle"><FONT face="Times New Roman" size=2>SCIENCE TO SCIENCE</FONT></TD></TR></TABLE>

如果对 https://jsfiddle.net/yguch1yb/ 有帮助,这里有一个小提琴 (请注意,您需要在下拉列表中选择一个才能解决我的问题)

【问题讨论】:

  • 为什么不使用单选按钮?
  • 我正在尝试创建一个模板,我希望它与源代码中的内容非常相似。而且我不知道我是否记得正确,但是使用单选按钮时,您需要有表单标签才能使其正常运行。
  • 希望您不要使用表格进行布局;这就是 CSS 的用途。并且&lt;font&gt; 标签不再有效。

标签: jquery html checkbox


【解决方案1】:

这将允许您创建可以用数字指定的复选框组。因此,当您定义它们时,这一代码将应用于多个组。这也将简单地验证给定组中的唯一值是您选择的最后一个值。

$('input[data-checkGroup]').on('click',function(){
  let item = this;
  let group = $(this).attr('data-checkGroup');
  let checked = $('[data-checkGroup="'+group+'"]:checked');
  $.each(checked,function(k,v){
    if(v !== item) v.checked = false;
  });
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" data-checkGroup="1"> Value 1<br/>
<input type="checkbox" data-checkGroup="1"> Value 2<br/>
<input type="checkbox" data-checkGroup="1"> Value 3<br/>
<input type="checkbox" data-checkGroup="1"> Value 4

<br/>

<span class="log"></span>

【讨论】:

  • 魔术!我不明白 k 和 v 之类的某些部分,但它起作用了。非常感谢!
  • @Selim k 和 v 代表键和值。查询$('[data-checkGroup="'+group+'"]:checked'); 获取与data-checkGroup id 匹配的每个复选框的列表,并将它们放入一个数组中。 $.each() 函数循环遍历数组并将不是您刚刚单击的元素的元素设置为等于 false。让我知道是否可以进一步解释!
猜你喜欢
  • 2013-07-20
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
相关资源
最近更新 更多