【问题标题】:Checkbox value not changing from false to true when checked选中时复选框值不会从 false 更改为 true
【发布时间】:2013-04-03 02:17:04
【问题描述】:

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

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;
    }
}

【问题讨论】:

    标签: javascript forms checkbox


    【解决方案1】:

    为了查找它是否被检查,您不需要评估它是否为真,尤其是对于字符串值。

    你只需要查找是不是.checked

    如果您想查找它是否不是.checked,只需使用:

    !document.getElementById("c_ierrors").checked
    

    完整代码:

    document.getElementById("c_ierrors")==null||document.getElementById("c_ierrors").checked
    

    这样就好了

    jsFiddle

    【讨论】:

    • 谢谢克里斯托弗。这种方法可以解决我的问题,它还指出我需要针对布尔值 true 而不是字符串“true”进行测试。
    【解决方案2】:

    问题出在你比较的第一个 if 语句的第二部分

    document.getElementById("c_ierrors").checked!="true"
    

    将布尔值与字符串进行比较会给您错误的结果。你可以在你的 JavaScript 控制台中检查这个,

    bool_val = true
    bool_val == "true"   # returns false
    

    您要么需要与true 进行比较,要么仅将其用作布尔值。例如

    document.getElementById("c_ierrors").checked != true
    

    !document.getElementById("c_ierrors").checked
    

    【讨论】:

    • 是的,非常感谢。即使多次查看代码,我也完全错过了这一点。
    猜你喜欢
    • 2017-11-07
    • 2012-03-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    相关资源
    最近更新 更多