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这不是重点吗?您可以使用此处的任何代码使所有内容保持未选中状态,也可以只选中单击的按钮,这是默认行为,不需要任何脚本。