带有html属性的不可检查的单选按钮'已检查'

时间:2017-01-06 09:32:35

标签: javascript jquery html radio-button

我正在使用#javascript中友好小伙伴提供的这个简单脚本取消选中单选按钮:

 $('.feed').on('click', 'input[type=radio]', function() {
    var myParent = $(this).closest('div');
  var ref = $(this);
  if( myParent.data('val') == $(this).val() ){
    var ref = myParent.find('.none input');
    ref.prop('checked',true);
  }
    myParent.data('val',ref.val() )
 });

一切正常,请参阅此fiddle,但当我添加属性'已选中'在一个单选按钮上,您实际上必须先单击两次才能取消选中它,请参阅此fiddle。这让我想到了,正在设置'检查'作为一个属性实际上等于手动检查单选按钮?或者为什么我失败了?

1 个答案:

答案 0 :(得分:1)

这与添加属性与点击无关,它是附加代码,特别是这一行:

if (myParent.data('val') == $(this).val() ){

其中说,如果您之前点击过这个,请将其关闭。

然而,你并没有告诉代码你已经(虚拟)“点击”了它。

您可以通过将初始值添加到'myParent'来实现此目的,一种方法是将其添加到html:

<div data-val='1'>

更新了小提琴:https://jsfiddle.net/8jh2k8u8/4/

另一种方法是通过查找所选的广播(:checked)来通过代码初始化父级:

var startup = $(".feed input[type=radio]:checked").first();
if (startup.length) {
    startup.closest("div").data("val", startup.val())
}

更新了小提琴:https://jsfiddle.net/8jh2k8u8/5/