不同浏览器中的Javascript和php执行优先级

时间:2016-08-04 21:12:37

标签: javascript php

我有一个简单的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浏览器不会登录用户,因为页面被重定向,它应该是如何工作的。

1 个答案:

答案 0 :(得分:2)

这不是如何进行表单验证。无法保证在按钮上调用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');
     }
});