0

我有一个这样的Javascript函数:

function isOneChecked(id) {
    var chk=document.getElementsByName(id);
    var len=chk.length;
    var flag=0;
    for(var i=0;i<len;i++) {
        if(chk[i].checked==true)
            flag=1;
    }
    return flag;
}

如果选中该复选框,此函数将返回标志 1。我想修改这个函数,使它返回被选中的复选框的数量。

<input type="checkbox" name="list_session" id="{{ forloop.counter }}" value="{{ i.id }}" onchange="isOneChecked()" />

我怎样才能做到这一点?谢谢你。

我已按照建议更新了功能:

function onEdit() {
    if(!isOneChecked('list_session') && isOneChecked('list_session') > 1) {
        alert('Please select a file!');
        return false;
        }
        return true;
}

但是,即使检查大于 1,它也不会返回please select a file. 如果未选中该框,Select a file则会显示。

4

1 回答 1

1

如果您将该行从flag=1;to更改为flag++;,那么它应该按照您的意图进行。这使得标志变量可以跟踪它遇到的检查次数,而不是总是将其设置为 1。

完整的函数如下所示:

function isOneChecked(id) {
    var chk=document.getElementsByName(id);
    var len=chk.length;
    var flag=0;
    for(var i=0;i<len;i++) {
        if(chk[i].checked==true)
            flag++;
    }
    return flag;
}

回应您的更新:

您的条件 ( !isOneChecked('list_session') && isOneChecked('list_session') > 1) 永远不会true

如果函数返回:

  • 0,你得到!0 && 0>1,其中(因为 0 评估为假)是true && false
  • 1,那么你得到!1 && 1>1,或false && false
  • 2 或更高,然后你得到!2 && 2>1false && false

总之,你必须修复你的条件。您可以通过删除该&& isOneChecked('list_session') > 1部分来做到这一点。这应该有效:

function onEdit() {
    if( !isOneChecked('list_session') ) {
        alert('Please select a file!');
        return false;
    }
        return true;
}
于 2013-04-29T04:13:54.787 回答