3

我有一个这样的 HTML:

<input type="checkbox" name="choice_shrd_with_me" id="choice{{ forloop.counter }}" value="{{ choice.file_name }}" />

我试图在 Javascript 中只获取这样的数组中的已检查元素:

var choices = [];
         for (var i=0;i<document.getElementsByName('choice_shrd_with_me').length;i++){
             choices.push(document.getElementsByName("choice_shrd_with_me")[i].value);
         }

无论复选框是否被选中,上面都会获取所有值。我只想获取选中复选框的值。我怎样才能做到这一点?

4

5 回答 5

6

只需过滤被检查的元素:

var choices = [];
var els = document.getElementsByName('choice_shrd_with_me');
for (var i=0;i<els.length;i++){
  if ( els[i].checked ) {
    choices.push(els[i].value);
  }
}
于 2013-07-02T09:51:19.433 回答
4

对于 IE < 9

function getCheckedByName(name){
    var chks = document.getElementsByName(name);
    var results = [];
    for(var i = 0; i < chks.length; i++){
        chks[i].checked ? results.push(chks[i]):"";
    }
    return results;
}

对于现代浏览器

function getModernCheckedByName(name){
    return  Array.prototype.slice.call(document.getElementsByName(name)).filter(function(e){
        return e.checked;
    });
}

工作示例

http://jsfiddle.net/yMqMf/

于 2013-07-02T10:00:50.130 回答
2

对于不需要循环的 vanilla js 解决方案,请使用querySelectorAll

const choices = document.querySelectorAll("input[name='choice_shard_with_me']:checked")
于 2021-01-20T10:41:10.680 回答
1

它的 JQuery 版本非常漂亮:

var choices = [];
$("input[name='choice_shard_with_me']:checked").each(function() {
    choices.push($(this).attr('value'));
});

:checked(与您想要完成的非常相似的示例)

每个()

属性()

于 2013-07-02T10:03:40.737 回答
0

看起来该解决方案非常适合复选框

但无论如何,如果决定用单选框更改复选框

简单地可以像下面这样获得radiobox的选定值:

var varName = $('input[name="formItemName"]:checked').val();  // To get selected item of your radiobox
于 2021-07-02T11:35:59.820 回答