javascript - 为什么这不起作用?

时间:2011-08-13 12:48:19

标签: javascript html validation

<form method="post" action="sendmail.php" name="Email_form">
Message ID <input type="text" name="message_id" /><br/><br/>
Aggressive conduct <input type="radio" name="conduct" value="aggressive contact" /><br/><br/>
Offensive conduct <input type="radio" name="conduct" value="offensive conduct" /><br/><br/>
Rasical conduct <input type="radio" name="conduct" value="Rasical conduct" /><br/><br/>
Intimidating conduct <input type="radio" name="conduct" value="intimidating conduct" /><br/><br/>
<input type="submit" name="submit" value="Send Mail" onclick=validate() />
</form>


    window.onload = init;  
    function init()     
    {          
        document.forms["Email_form"].onsubmit = function() 
        {                                                                 
            validate();                                                                 
            return false;                                                             

        };     
    } 

    function validate() 
    {     
        var form = document.forms["Email_form"]; //Try avoiding space in form name.     
        if(form.elements["message_id"].value == "") { //No value in the "message_id" 
            box     
            {         
                alert("Enter Message Id");         
                //Alert is not a very good idea.          
                //You may want to add a span per element for the error message        
                //An div/span at the form level to populate the error message is also ok        
                //Populate this div or span with the error message         
                //document.getElementById("errorDivId").innerHTML = "No message id";

                 return false;  //There is an error. Don't proceed with form submission.

            } 
        }
    }
</script>

我错过了什么或者我只是愚蠢吗?

编辑*** 对不起我应该加!问题是我希望javascript阻止用户进入'sendmail.php',如果他们没有输入消息ID并点击一个单选按钮...此时这不会这样做并且如果没有输入则发送空白电子邮件

3 个答案:

答案 0 :(得分:4)

您正在使用

validate();
return false;

...这意味着提交事件处理程序始终返回false,并且始终无法提交。你需要改用它:

return validate();

此外,在使用document.forms["Email form"]的地方,空格应为下划线。


这是一个完全重写的示例,它使用现代的,符合标准的,有组织的代码,并且有效:

http://jsbin.com/eqozah/3

请注意,成功提交表单会将您带到'sendmail.php',这在jsbin.com服务器上实际上并不存在,并且您会收到错误,但您知道我的意思。< / p>

这是一个更新版本,它使所使用的方法变得简单,以便它可以与Internet Explorer一起使用,还包括单选按钮验证:

http://jsbin.com/eqozah/5

答案 1 :(得分:1)

在识别表单时忘记了下划线:

document.forms["Email_form"].onsubmit = ...

编辑:

document.forms["Email_form"].onsubmit = function() {
    return validate();
};

function validate() {
    var form = document.forms["Email_form"];
    if (form.elements["message_id"].value == "") {
        alert("Enter Message Id");
        return false;
    }
    var conduct = form.elements['conduct']; //Grab radio buttons
    var conductValue; //Store the selected value
    for (var i = 0; i<conduct.length; i++) { //Loop through the list and find selected value
        if(conduct[i].checked) { conductValue = conduct[i].value } //Store it
    }
    if (conductValue == undefined) { //Check to make sure we have a value, otherwise fail and alert the user
        alert("Enter Conduct");
        return false;
    }
    return true;
}

返回validate的值。如果验证成功,验证应返回true,否则返回false。如果onsubmit函数返回false,则页面不会更改。

编辑:添加了检查单选按钮的代码。您应该考虑使用javascript框架来让您的生活更轻松。此外,您应该从提交输入按钮中删除onclick属性,因为验证应该在提交中处理,而不是按钮的单击

答案 2 :(得分:0)

最明显的错误,您的表单的名称属性为“Email_form”,但在您的Javascript中引用了document.forms["Email form"]。具有讽刺意味的是,你甚至在那里有评论,不要在你的表格名称中使用空格:)