JavaScript中函数返回true后如何重定向到外部URL
问题解决:验证通过后实现外部URL重定向
你的问题出在跳转逻辑的位置、调用方式错误,以及表单默认提交行为干扰了跳转流程。以下是修正后的完整代码和关键说明:
修正后的代码
<!doctype html> <html> <head> <meta charset="utf-8"> <title>login</title> <!-- 合作伙伴编号验证逻辑 --> <script> function checkNumber(form) { var partnernr = form.partnernr.value; // 简化正则,去掉多余的?确保匹配严格符合格式的内容 var regex1 = /^[0-9]{6}$/; var regex2 = /^[0-9]{5,6}[+\-\/][0-9]$/; // 合并判断逻辑,更简洁 if (!regex1.test(partnernr) && !regex2.test(partnernr)) { alert('你的合作伙伴编号无效。'); form.partnernr.focus(); return false; } // 验证通过后执行跳转 window.location.href = 'https://www.xyz.de'; // 返回false阻止表单默认提交,避免页面刷新打断跳转 return false; } </script> </head> <body> <form action="" method="post" onsubmit="return checkNumber(this)"> <!-- 修复placeholder属性多余的引号 --> <input type="text" name="partnernr" placeholder="例如:600000 / 600000-1" /> <input type="submit" name="submit" class="ikbsendbutton postidentbutton" value="启动POSTIDENT验证" /> </form> </body> </html>
关键修正说明
- 跳转逻辑位置调整:把跳转代码移到
checkNumber函数内部的验证通过分支里,原代码的跳转语句写在函数外,页面加载时就会执行,完全不符合需求。 - 正确调用跳转方法:
window.location.replace是方法,需要用window.location.replace('https://www.xyz.de')调用(而非赋值);也可以用window.location.href = 'url',前者不会留下历史记录,后者会保留跳转前的页面历史。 - 阻止表单默认提交:验证通过后必须返回
false,否则表单会执行默认提交行为(action为空时会刷新当前页面),直接打断跳转流程。 - 正则与语法修复:简化正则表达式去掉多余的
?,避免匹配空值或不完整内容;同时修复输入框placeholder属性后多余的引号,修正HTML语法错误。
内容的提问来源于stack exchange,提问作者Kathleen Babatz
相关产品推荐
相关产品推荐

