<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并点击一个单选按钮...此时这不会这样做并且如果没有输入则发送空白电子邮件
答案 0 :(得分:4)
您正在使用
validate();
return false;
...这意味着提交事件处理程序始终返回false,并且始终无法提交。你需要改用它:
return validate();
此外,在使用document.forms["Email form"]
的地方,空格应为下划线。
这是一个完全重写的示例,它使用现代的,符合标准的,有组织的代码,并且有效:
请注意,成功提交表单会将您带到'sendmail.php',这在jsbin.com服务器上实际上并不存在,并且您会收到错误,但您知道我的意思。< / p>
这是一个更新版本,它使所使用的方法变得简单,以便它可以与Internet Explorer一起使用,还包括单选按钮验证:
答案 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"]
。具有讽刺意味的是,你甚至在那里有评论,不要在你的表格名称中使用空格:)