为啥 jQuery 看不到已自动选中的复选框?

Posted

技术标签:

【中文标题】为啥 jQuery 看不到已自动选中的复选框?【英文标题】:Why does jQuery not see a checkbox has been auto checked?为什么 jQuery 看不到已自动选中的复选框? 【发布时间】:2018-12-09 06:49:33 【问题描述】:

我有一些 jQuery 检查以查看人类何时单击检查按钮,但如果页面加载时标记为已检查的按钮,则 jQuery 不起作用。

    $ (function()
        var requiredCheckboxes = $('.options :checkbox[required]');
        requiredCheckboxes.change(function()
            if(requiredCheckboxes.is(':checked')) 
                requiredCheckboxes.removeAttr('required');
             else 
                requiredCheckboxes.attr('required', 'required');
            
        );
    );

我需要做的是,如果复选框已被选中,它会删除所需的属性。为什么将变量发布到页面并且 php 在输入中添加了 checked="checked" 时它不起作用?

谢谢!

【问题讨论】:

我应该澄清一下,这是为了确保在验证期间选中其中一个复选框。 我需要类似 requiredCheckboxes.is(':checked') ||这个位检查是否已经检查过? 【参考方案1】:

您必须使用this 作为选择器来检查单击的复选框是否被选中。 this 指的是被点击的复选框。您可以使用prop()添加和删除required

var requiredCheckboxes = $('.options');

requiredCheckboxes.change(function() 
  if ($(this).is(':checked')) 
    $(this).prop('required', false);
   else 
    $(this).prop('required', true);
  
);
input:required 
  box-shadow: 4px 4px 20px rgba(200, 0, 0, 0.85);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class='options' type="checkbox" required>
<input class='options' type="checkbox" required>
<input class='options' type="checkbox" required>
<input class='options' type="checkbox" required>

更新:您可以为所需的复选框使用一个类,并使用prop() 添加和删除required 属性。

var requiredCheckboxes = $('.required-options')

//On page Loads
if (requiredCheckboxes.is(':checked')) 
  requiredCheckboxes.prop('required', false);
 else 
  requiredCheckboxes.prop('required', true);



//Event listener
requiredCheckboxes.change(function() 
  if (requiredCheckboxes.is(':checked')) 
    requiredCheckboxes.prop('required', false);
   else 
    requiredCheckboxes.prop('required', true);
  
);
input:required 
  box-shadow: 4px 4px 20px rgba(200, 0, 0, 0.85);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class='required-options' type="checkbox" required checked>
<input class='required-options' type="checkbox" required>
<input class='required-options' type="checkbox" required>
<input class='required-options' type="checkbox" required>

【讨论】:

我明白你的意思,但这只会从复选框中删除所需的内容。我需要从所有复选框中删除。 这个想法是只需要一个复选框。 这在没有选中任何框的情况下有效,但是,当页面加载时已经选中了一个框,jQuery 没有看到该框被选中并且不会删除所需的属性。 @EricTheRed 在页面加载时,您必须检查复选框是否被选中并执行该过程。我更新了代码 您可能需要将这些代码放在函数上以消除重复。【参考方案2】:

html

<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />
<input type="checkbox" />

js:

$("document").ready(function()
$('body').find('input:checkbox').prop('checked', "checked");
);

jsfiddle

【讨论】:

以上是关于为啥 jQuery 看不到已自动选中的复选框?的主要内容,如果未能解决你的问题,请参考以下文章

为啥jquery看不到html的变化? [复制]

Jquery if复选框是否已选中Bootstrap开关

在单击 jquery 时添加属性“已检查”

使用jQuery获取div中已选中复选框的列表

vue 刚加载的菜单无法渲染选中效果

如果另一个类的复选框已被选中,如何从 jQuery 过滤器中排除某个复选框类?