Jquery嵌套了每个函数

时间:2016-09-20 12:33:53

标签: jquery

我克隆了一些单选按钮,附在页面的每一行。当我尝试循环遍历它们以“检查”页面加载时正确的单选按钮时,它仅适用于变化的最后一个。

以下是Codepen上的问题: http://codepen.io/trinzia/pen/dpOoRk

var buttonpanel = $("#sectionbuttons");
$('section').each(attachRowButtons);

function attachRowButtons(i, elem) {

  var newpanel = buttonpanel.clone(true, true);
  $(elem).append(newpanel);
  newpanel.removeAttr("id").removeClass('collapse');

  var d = $(elem).data('type');
  if (d) {

    newpanel.find('input[name="myradio"]:radio').each(getType);

    function getType(i, elem) {

      var n = $(this).val().search(d);

      if (n > -1) {
        $(this).prop("checked", "checked"); //correct
      }
    }


  }

}

如果你看一下codepen,你会看到,即使每一行都匹配,也只检查最后一个单选按钮组。我需要正确检查值(无线电检查=检查),每行一个。

谢谢!

3 个答案:

答案 0 :(得分:2)

您只选中1个单选按钮的原因是因为它们共享相同的名称属性" myradio"。您需要更改克隆输入的名称才能成为单独的组。

你可以这样做:

var newpanel = buttonpanel.clone(true, true);
newpanel.find('input').each(function() {
  $(this).attr('name', 'anothername');
});

稍后当您在面板中找到输入元素时,您应该更改:

newpanel.find('input[name="myradio"]:radio').each(getType);

newpanel.find('input:radio').each(getType);

答案 1 :(得分:2)

更新js请链接:http://codepen.io/anon/pen/rrWVEr

response.setContentType("application/pdf") 
response.setHeader("Content-Disposition", "inline; filename= .. " )

答案 2 :(得分:1)

您已经有两个正确答案了。是的,问题出在same named radio buttons上。由于你已经用其他答案找出了它,我想在检查单选按钮时使代码更简单。

您可以在if(d)

中简化您的代码
if ( d ) {     
 newpanel.find( 'input[name="myradio"][value="'+ d +'"]')
   .prop("name","random" + i)
   .prop("checked", "checked");
}

您可以使用value选择器而不是循环并尝试查找与该值匹配的选择器。