选中时复选框值不会从 false 更改为 true

Mak*_*nce 5 javascript forms checkbox

此 JavaScript 函数查找表单中的错误并列出它们。如果存在错误,它会创建一个错误覆盖复选框,以允许即使有错误也可以提交。目前,代码无法识别复选框何时被选中。显然第一个 if 语句总是被发现为 true。有想法吗?

function check1()
{  
    // c_ierrors is the id of the input tag inserted below within the c_erros div

    if( document.getElementById("c_ierrors")==null || document.getElementById("c_ierrors").checked!="true" )
    {   
    //if javascript generated form error overide checkbox does not exist or exists but is not true then list errors and don't submit the form    
    //code to generate divs listing errors
    //
        if(error=="")
        {
            //submit form
            return true;
        }  
        else
        {
            error += "<div id=\"c_erow\"><input type=\"checkbox\" id=\"c_ierrors\" name=\"override\" value=\"y\" >Override Errors</div>"  //add checkbox to submit form despite errors
            document.getElementById("c_errors").innerHTML=error;
            alert (document.forms["cform"]["override"].checked);     
            return false;  //stay on page don't submit form 
        }
    }
    else
    {  
        //if override checkbox (exists) and is true
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

ric*_*ard 3

问题出在第一个 if 语句的第二部分,您进行比较

document.getElementById("c_ierrors").checked!="true"
Run Code Online (Sandbox Code Playgroud)

将布尔值与字符串进行比较会得到错误的结果。您可以在 JavaScript 控制台中使用以下命令进行检查:

bool_val = true
bool_val == "true"   # returns false
Run Code Online (Sandbox Code Playgroud)

您要么需要比较它true,要么只是将其用作布尔值。例如

document.getElementById("c_ierrors").checked != true
Run Code Online (Sandbox Code Playgroud)

或者

!document.getElementById("c_ierrors").checked
Run Code Online (Sandbox Code Playgroud)