这个问题在一些历史代码中变得明显,似乎是与IE8 +和FF4 +有关的问题
我有一个验证联系表单的js文件,一个特定部分调用一个函数来打开一个新窗口,其中包含一些用户信息。此时脚本似乎忽略了我的valid = false
变量(标记为停止表单提交)
function showFormat() {
var myWindow;
myWindow = window.open("http://url/page.html","Postcode_Information","location=1,status=1,scrollbars=1,width=640,height=400");
myWindow.moveTo(50,50);
}
上面的代码导致了这个问题。我已经尝试将valid=false; return valid;
添加到函数的末尾但显然被忽略了。将此添加到函数的开头意味着有效性是正确的并且表单没有提交但显然我的新窗口没有打开。
编辑以详细说明
我的js文件有一系列验证功能(检查用户名,地址,电子邮件地址有效性等)。初始化一个名为valid
的变量,除非任何用户输入未验证,否则它将始终为true,在这种情况下valid = false
。
如果valid = false
则运行if语句,该语句检查多个变量以确定验证的哪个区域导致了问题,并将标记适当的提示。其中大部分都是通过消息框完成的(我继承了这段代码并且只是试图让它工作)但是一个提示打开了一个新窗口。如果完全调用这些提示中的任何一个,则不应提交表单。
我遇到的问题是,当这个新窗口打开时(这是导致此问题的唯一提示),表单仍会提交。
请参阅下面的代码,了解调用这些提示的示例:
if (!valid) {
if (emailNoAddress == true) {
alert('You have requested to receive more information by email from other company(ies) but have not provided email address details – Please correct this below');
highlightEmail();
}
else {
if (contactDetails == false) {
alert('Please provide your email address details. We will not send you future correspondence and offers by email if you prefer us not to.');
highlightAddress();
highlightEmail();
}
else {
if (postcodeGiven == false) {
if (dataform.pcode.value == "") {
alert('Please enter a valid postcode');
}
else {
showFormat();
}
}
else {
if (questionsAnswered == false || countryGiven == false) {
alert('Please choose an answer from the options provided');
}
else {
//alert(checkstr);
alert('Could you please complete the questions missing details');
}
}
}
}
}
所以你看,我的函数只能在!valid
时调用,在这种情况下表单不应该提交,但只要我执行新窗口函数showformat()
它就允许提交表单。
编辑 - 更新
我设法将问题略微缩小,因为在新窗口打开后,不再执行脚本(我已尝试添加一些警报消息来检查valid
的值,但它们不是显示 - 我也尝试在使用Firebug进行调试时添加断点,但这不会被命中)并且表单无论如何都会提交...
编辑 - 更新
因为这是一个时间紧迫的问题,目前我只是将弹出窗口中的所有文本放入警报并调用而不是函数。当我有更多时间花在调查上时,我会更新。
答案 0 :(得分:0)
您是否在表单标记上定义了onsubmit事件?如果是,请在onsubmit事件中添加关键字 return ,如下所示 onsubmit =“return some_function”,在名为u的函数中,必须指定 return false 。然后你会得到你想要的。
希望这会对你有所帮助。
答案 1 :(得分:0)
以下是适用于您需要的简单示例。试试这个并相应地更正你的代码
<html>
<head>
<script type="text/javascript">
function validate()
{
if(document.forms[0].stext.value!="")
{
return showformat();
}
else
return false;
}
function showformat()
{
window.open("new.html","");
return false;
}
</script>
</head>
<body >
<form name="sample" action="onsel.html" method="post" onsubmit="return validate()">
<input type="text" name="stext" id="stext" value="" />
<input type="submit" value="Submit"/>
</form>
</body>
</html>
希望这有助于你