先看原来代码:
//校验用户名
function checkUsername() {
alert("检验用户名");
return true;
}
function checkPassword() {
alert("检验密码");
return false;
}
$(function () {
//当表单提交时,调用所有的检验方法
$("#registerForm").submit(function () {
//如果方法没有返回值或者返回为True,若返回false,则表单不提交
return checkUsername() && checkPassword();
});
//当失去焦点时,校验用户名
$("#username").blur(checkUsername());
});
这部分代码主要是想在用户名username的input框失去焦点后,执行校验用户名的操作,但是实际上,当我们打开网页时,会发生先执行blur操作,这和我们想的完全不样,不应该是先使其获得焦点后,再当失去焦点才执行blur操作吗?
原因:
blur中传递的函数写法有问题,传递的函数只写函数名即可,不应该加括号。即:
$("#username").blur(checkUsername);//不是$("#username").blur(checkUsername());
另一种方法可以是在失去焦点事件中对其中的方法进行了延迟处理,修改代码如下:
//校验用户名
function checkUsername() {
alert("检验用户名");
return true;
}
function checkPassword() {
alert("检验密码");
return false;
}
$(function () {
//当表单提交时,调用所有的检验方法
$("#registerForm").submit(function () {
return checkUsername() && checkPassword();
//如果方法没有返回值或者返回为True,若返回false,则表单不提交
});
//当某个组件失去焦点时,用对应的校验方法
//在失去焦点事件中对其中的方法进行了延迟处理
$("#username").blur(function () {
setTimeout(checkUsername(),100)
});
});
修改后,jquery–blur()事件登录网页先触发失去焦点事件解决。