Javascript 为什么event.preventDefault()并不总是有效?
我有一个通过ajax提交的表单。我必须在提交前检查输入字段值,但无论我做什么,表单都会不断提交,即使它没有通过测试。有人知道为什么会这样吗?如果您在下面看到我的代码,表单提交函数将检查这些值,如果不符合条件,则返回false。但是,由于某些原因,返回false或event.preventDefault()都不起作用。我不知道发生了什么事。也许我忽略了什么Javascript 为什么event.preventDefault()并不总是有效?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个通过ajax提交的表单。我必须在提交前检查输入字段值,但无论我做什么,表单都会不断提交,即使它没有通过测试。有人知道为什么会这样吗?如果您在下面看到我的代码,表单提交函数将检查这些值,如果不符合条件,则返回false。但是,由于某些原因,返回false或event.preventDefault()都不起作用。我不知道发生了什么事。也许我忽略了什么 function checkPass(){ var newPass = $("#newPass").val(); var c
function checkPass(){
var newPass = $("#newPass").val();
var confirmPass = $("#confirmPass").val();
if(newPass != confirmPass || confirmPass == '') {
$( "#confirmDiv" ).addClass( "has-warning" );
$( "#confirmError" ).addClass( "animated fadeInDown" );
$( "#confirmError" ).addClass( "text-warning" );
document.getElementById("confirmError").style.fontSize = '14px';
document.getElementById("confirmError").innerHTML = "The passwords don't match.<br>";
event.preventDefault();
return false;
} else {
$( "#confirmDiv" ).removeClass( "has-warning" );
document.getElementById("confirmError").innerHTML = "";
$( "#confirmError" ).removeClass( "animated fadeInDown" );
return true;
}
}
function updatePassword(){
checkPass();
event.preventDefault();
var url = "updatePassword.php";
var form = $("#updatePassword");
$.ajax({
url: url,
type: "POST",
data: form.serialize(),
success: function(a) {
if (a == "Success!") {
alert(a);
document.getElementById('updatePassword').reset();
} else {
alert(a);
}
}
});
}
函数checkPass(){
var newPass=$(“#newPass”).val();
var confirmPass=$(“#confirmPass”).val();
如果(newPass!=confirmPass | confirmPass==''){
$(“#confirmDiv”).addClass(“有警告”);
$(“#确认错误”).addClass(“动画fadeInDown”);
$(“#确认错误”).addClass(“文本警告”);
document.getElementById(“confirmError”).style.fontSize='14px';
document.getElementById(“confirmError”).innerHTML=“密码不匹配。
”;
event.preventDefault();
返回false;
}否则{
$(“#confirmDiv”).removeClass(“has warning”);
document.getElementById(“确认错误”).innerHTML=“”;
$(“#确认错误”).removeClass(“动画fadeInDown”);
返回true;
}
}
函数updatePassword(){
checkPass();
event.preventDefault();
var url=“updatePassword.php”;
变量形式=$(“#更新密码”);
$.ajax({
url:url,
类型:“POST”,
数据:form.serialize(),
成功:职能(a){
如果(a==“成功!”){
警报(a);
document.getElementById('updatePassword').reset();
}否则{
警报(a);
}
}
});
}
您需要传递事件参数才能使用event.preventDefault(),顺便说一句,您使用的是return false
,这应该可以防止。但是仔细查看您的代码,我发现了一个问题。您正在updatePassword和其他代码中调用checkPass
function updatePassword(){
checkPass();
// rest of the code still runs if checkPass returns false
因此,您需要在这里使用一个条件:
function updatePassword(){
if(checkPass()) {
// rest of the code
现在,您正确地阻止了这种行为。或者,如果要使用preventDefault(),可以通过在updatePassword中提供事件参数来修复代码
供您分析的测试用例:
功能测试(){
返回错误
}
函数test2(){
if(test())
console.log('test2')
}
函数test3(){
测试()
console.log('test3')
}
test2()
test3()
您好,我假设在onsubmit事件发生时,您正在调用“updatePassword()”方法,我认为您应该做一些这样的更改,它对我有效,我希望它对您有效
function updatePassword() {
event.preventDefault();
if (checkPass()) {
var url = "updatePassword.php";
var form = $("#updatePassword");
$.ajax({
url: url,
type: "POST",
data: form.serialize(),
success: function (a) {
if (a == "Success!") {
alert(a);
document.getElementById('updatePassword').reset();
} else {
alert(a);
}
}
});
}
}
尝试显式传递
事件
,而不是依赖于全局定义它。函数updatePassword(){
应该是函数updatePassword(事件){
同样适用于checkPass()
->checkPass(事件)`这些方法是如何调用的?错误是否特定于浏览器?将事件添加到my函数无效:/“您需要传递事件参数才能使用event.preventDefault(),”不幸的是…不是。在支持非标准window.event全局的浏览器中,您可以通过使用window.event.preventDefault()很好地防止当前事件的默认行为
。在DOM2事件处理程序中返回false完全没有任何作用。您可能会与jQuery事件处理程序混淆。@Kaido我正在考虑元素中的方法绑定……嗯,我可能会混淆。没有这样的方法。(jQuery对象确实有它)