我无法正确提交此表单。如果我将按钮类型设置为“submit”它总是提交,如果我使用“button”作为它从不提交的类型,则ajax调用会带来正确的值,因此即使if
语句遵循正确的路径但它似乎并不重要。
<script type="text/javascript">
$(document).ready(function(){
$("#submitButton").click(function(e) {
var un = $('#username').val();
$('#mike').html("");
$.ajax(
{
type: "POST",
url: "Utilities/CheckUsername.php",
data: "un="+ un,
success: function(data2)
{
if(data2=="Username Does Not Exist")
{
$("#login2").submit();
}
else
{
$('#mike').html(data2);
return false;
}
}
});
});
});
</script>
</head>
<body>
<form name="login" id="login2" method="post" action="dsds.html">
UserName<input type="text" name="username" id="username"value="">
<br/>
Password<input type="text" name="password" id="password" value="">
<br/>
Password Again<input type="text" name="passwordagain" id="passwordagain" value="">
<br/>
<input type="hidden" name="NewClass" id="NewClass" value="true">
<br/>
<input type="submit" name="no" id="submitButton" value="submit">
</form>
<span id = "mike"></span>
</body>
</html>
编辑: 我在这里添加了返回false并且它有效,但为什么呢?我只是从点击事件
返回falseelse
{
$('#mike').html(data2);
}
}
});
return false;
});
答案 0 :(得分:3)
您只需要提交事件处理程序中的return false
即可。在异步ajax调用结束后 后,您所拥有的return false
才会执行。
或者你可以使用e.preventDefault()
做同样的事情。
这两种方法都只是防止出现默认行为,即提交表单。
答案 1 :(得分:2)
我建议您将事件处理程序绑定到表单的submit
事件:
$('#login2').submit(function(event) {
event.preventDefault();
//...
});
您必须阻止提交表单的事件的默认操作。这是通过event.preventDefault
[docs]完成的。 Ajax回调中的return false
将无效,因为事件处理程序在收到响应之前返回。
如果你这样做,你必须设置某种标志,以查看你所处的过程状态:
var nameAvailable = false;
$('#login2').submit(function(event) {
if(!nameAvailable) {
event.preventDefault(); // don't submit form
//...
$.ajax({
success: function() {
// if name available
nameAvailable = true;
$('#login2').submit();
}
});
}
});