我有一个简单的JS语句,它可以"保护"我在我的网站上的登录表单中不使用特殊字符:
$("#login_button").click(function(){
formChecker();
});
function formChecker() {
var checkLogin = document.forms["loginForm"]["username"].value;
if ((checkLogin.indexOf("!") > -1) || (checkLogin.indexOf("@") > -1) || (checkLogin.indexOf("#") > -1)) {
alert("Special characters not allowed! Please use A-Z and numbers.");
document.location = "http://mywebsite.com/";
}
}
它在Chrome中运行良好。每当有人使用其中一个字符时,他就会立即被重定向,因此php登录脚本不会执行。
当我在Internet Explorer中使用它时,会出现此问题。它实际上重定向了我的页面,但php脚本无论如何都会执行。我也试过window.location
,但它在IE中根本不起作用。这个浏览器有什么问题?不同浏览器的scipt优先级是否不同?
我的意思是,在IE上,即使用户被重定向,当他回到网站时,他也会登录,但他不应该登录。chrome浏览器不会登录用户,因为页面被重定向,这就是它应该如何工作的。
这不是表单验证的方法。不能保证按钮上会调用click
(例如,可以通过按Enter键提交表单(;你并没有通过重定向来阻止表单的提交(这是一个可能首先发生的竞争条件(;而且警报和重定向对用户来说是相当敌对的。
您应该在表单本身上拾取submit
事件,如果不希望表单提交,则取消该事件。例如,在页面中添加一个带有id="formErrorMessage"
的div,然后:
var goodUsernamePattern = /^[a-zA-Z0-9_-]+$/;
$('#loginForm').on('submit', function(event) {
if (!goodUsernamePattern.test(this.username.value)) {
event.preventDefault();
$('#formErrorMessage').text('Please enter a good username blah');
}
});