Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery取消选中单选按钮不工作_Javascript_Jquery - Fatal编程技术网

Javascript Jquery取消选中单选按钮不工作

Javascript Jquery取消选中单选按钮不工作,javascript,jquery,Javascript,Jquery,这应该是正确的代码,但它不起作用 <input type="radio" name="test">1 <input type="radio" name="test">2 $('input[name=test]').click(function() { $('input[name=test]').attr(‘checked’,false); }); 这里的例子 编辑: 我忘记了一行应该说如果选中了它,那么取消选中它,将.attr更改为.prop,它就可以正常工

这应该是正确的代码,但它不起作用

<input type="radio" name="test">1
<input type="radio" name="test">2

$('input[name=test]').click(function() { 
    $('input[name=test]').attr(‘checked’,false);
});
这里的例子

编辑:

我忘记了一行应该说如果选中了它,那么取消选中它,将.attr更改为.prop,它就可以正常工作了。您还需要将您正在使用的引号更改为正确的类型,因为这也会导致它在此时中断:

$('input[name=test]').click(function() { 
    $(this).prop('checked',false);
});
你可以看到这个在这里面起作用

根据评论更新

现在我真正理解了需要什么,需要一种不同的方法。您需要通过将选中属性存储在属性中来记住该属性的上一个值:

$('input[name=test]').click(function(e) { 
    var previous = $(this).attr('previous');
    if(previous){
        $(this).prop('checked', false)
    }
    $(this).attr('previous', $(this).prop('checked'));
});
看到这个了吗

根据进一步评论更新2

第一次更新中的上述代码并不完全有效,因为当单击集合中的其他单选按钮时,先前选中的单选按钮的previous属性保持设置,但实际上并未选中该单选按钮。我们可以通过以下方式避免这种情况:

var previousElem;
$('input[name=test]').click(function(e) { 
    var previous = $(this).attr('previous');
    if(previous && previousElem === this){
        $(this).prop('checked', false);
    }
    previousElem = this;
    $(this).attr('previous', $(this).prop('checked'));
});
$'input[name=test]'。属性'checked',false

对于jQuery 1.6+,可以使用以下值:


当然,这是假设您的目标是引诱可能使用选中单选按钮的用户拒绝他们。

如果使用jQuery 1.6,则删除“checked”属性+

$('input[name=test]').filter(':checked').prop('checked', false);
对于早期版本:

$('input[name=test]').filter(':checked').removeAttr('checked');
编辑以修复OPs实际问题,即当单击当前选定的按钮时,如何取消选中集合中的所有单选按钮,这至少在Chrome 12中有效:

$('input[name=test]').click(function(e) {

    // find out whether it was already checked
    var wasChecked = $(this).data('checked') || false;

    // ensure all buttons think they're unchecked 
    $('input[name=test]').data('checked', false);

    if (wasChecked) {
        // leave them all unchecked
        this.checked = false;
    } else {
       // just check this one
       this.checked = true;
       $(this).data('checked', true);
    }
});

进行演示我知道这是一篇老文章,但我有一个更优雅的解决方案:

$('input[type="radio"]').mouseup(function () {
    if ($(this).prop('checked')) {
        $(this).one('click', function () {
            $(this).prop('checked', false);
        });
    }
});
它在单选按钮上附加一个mouseup处理程序。这显然是因为单选按钮的状态在mouseup和click事件之间的某个地方已经改变了。当您释放鼠标按钮时,我们知道单选按钮的当前状态。只有选中它,我们才会将一次性单击处理程序附加到取消选中它的单选按钮

更新:


我已经为这件事做了准备。它还支持单击标签,只捕获鼠标左键单击。

您到底想做什么?根据您的代码,当您单击它们时,它不会检查任何内容,但是如果这是您的目标,那么您应该只添加disabled属性。你能详细说明你的最终目标吗?给这两台收音机加上“禁用”属性不是更容易吗?编辑:看来赛斯和我的印象是一样的;取消选中哪个?您似乎要求单击其中一个选中元素并清除这两个元素上的复选框?我需要单选按钮一次选中一个,或者如果已选中的按钮被单击,则单击它unchecks@Lee两个都不勾选,还是只勾选那个?如果是后者,则不需要代码!是的,这是一个很好的观点。我之所以发布此消息,是因为问题中的示例小提琴设置为使用1.6。抱歉,我需要它取消选中,只有当其checked@Lee-查看我的更新,如果我现在正确地理解了您的意思,应该可以了。再次请注意,它需要jQuery 1.6+,因为它使用prop函数。@James这和我正在处理的小提琴有相同的问题-如果你在另一个按钮被取消选择时单击另一个按钮,有时单击被忽略。@Alnitak-好的地方,我没有注意到!回到绘图板我猜。对不起,我需要它取消选中,只有当它选中???这将取消选中任何已选中的内容,其他两个解决方案也是如此。如果您只想修改由于事件绑定或其他原因而被检查的内容,可以使用$input[name=test]:checked。我不太明白你想发生什么,否则。对不起,我需要它取消选中,只有当它是checked@Lee您的原始代码没有提到这一点-答案已更新以反映这一点。注意:。过滤器“:checked”比$”更可取:checked”-请看是的,对不起,我忘了那一点…我刚试过那一行,它根本不让我检查它…@Lee你需要更清楚地了解你想要实现的目标。@Lee这不是重点吗?您可以使用此处的任何代码使所有内容保持未选中状态,也可以只选中单击的按钮,这是默认行为,不需要任何脚本。