在这个更大的网络应用程序的简化示例中,请考虑一个简单的注册表单,其中包含以下字段:用户名,名字,姓氏和注册按钮type="button"
。
<form action="" method="post" id="cns_form">
<table id="companyTable"><tr>
<td width="200">
First name*:<br />
<input type="text" id="first_name" name="first_name">
</td>
<td width="200">
Last name*:<br />
<input type="text" id="last_name" name="last_name">
</td>
</tr></table>
<input type="button" value="Register" id="register" >
</form>
<div id="alert" title="Alert"></div>
当用户名字段完成后,jQuery将触发数据库的ajax搜索,以查看该用户名是否已存在。单击 Register 时也会触发相同的搜索(出于从此简化示例中删除的原因)。
问题:离开用户名字段时一切正常。但是,在单击 Register 之后,我不知道如何检索AJAX搜索的结果,并且如果用户名已存在则停止提交表单。我已尝试过各种不同的东西,但已将代码返回到此状态,因此读者最容易提供帮助。
例如,我尝试集成来自this question的建议解决方案,但我没有成功应用于我的情况......我尝试在ajax函数中设置async:false
...我也试过调用来自checkForm函数内部的checkUsername(uname),但这也不起作用。一点帮助?
jQuery document.ready:
$(function(){
$('#username').blur(function() {
var uname = $.trim($(this).val());
checkUsername(uname);
}); //END BLUR username
$('#register').click(function() {
var uname = $.trim($( '#username').val());
checkUsername(uname);
checkForm();
});
}); //END document.ready
AJAX致电:
function checkUsername(uname) {
if (uname != '') {
$.ajax({
type: "POST",
url: 'ajax/ax_all_ajax_fns.php',
data: 'request=does_this_username_already_exist&username=' + uname,
async: false,
success:function(data){
//alert('Returned AJAX data: '+data);
if (data != 0) {
var existing_user = data.split('|');
var fn = existing_user[0];
var ln = existing_user[1];
focus_control = 'username';
$( '#alert' ).html( 'That username is already in use by ' + fn +' '+ ln +'. Please choose another.' );
$( '#alert' ).dialog( 'open' );
} //EndIf data<>0
} //End success
}); //End $.ajax
} //End If this.val <> ""
}
checkForm功能:
function checkForm() {
var un = $.trim($( '#username').val());
var fn = $( '#first_name').val();
var ln = $( '#last_name').val()
if (un=='' || fn=='' || ln=='') {
$( '#alert' ).dialog({
height: 200,
width: 300,
});
$( '#alert' ).html( 'Fields marked with an asterisk are required.' );
$( '#alert' ).dialog( 'open' );
} else {
$("#cns_form").submit();
}
}
答案 0 :(得分:4)
当回答他自己的问题时,一个人都欢喜和哭泣,但是这里有。解决方案是将checkUsername()函数作为输入参数发送到checkForm()函数,并使checkUserName()函数返回一个我们可以在checkForm()中检查的值。
因此,我们必须修改$('#register').click
函数:
$('#register').click(function() {
var uname = $.trim($( '#username').val());
checkForm(checkUsername(uname)); //<===========================
});
那么 checkUsername()函数,因此:
function checkUsername(uname) {
var returnVal = 0; //<=================================
if (uname != '') {
$.ajax({
type: "POST",
url: 'ajax/ax_all_ajax_fns.php',
data: 'request=does_this_username_already_exist&username=' + uname,
async: false,
success:function(data){
//alert('Returned AJAX data: '+data);
if (data != 0) {
var existing_user = data.split('|');
var fn = existing_user[0];
var ln = existing_user[1];
focus_control = 'username';
$( '#alert' ).html( 'That username is already in use by ' + fn +' '+ ln +'. Please choose another.' );
$( '#alert' ).dialog( 'open' );
returnVal = 0; //<============================
} //EndIf data<>0
} //End success
}); //End $.ajax
} //End If this.val <> ""
return returnVal; //<==============================
}
AND checkform()函数因此:
function checkForm(exists) { //<============================
alert('sub checkForm(). value of exists: ' + exists);
if (exists==9) { //<================================
$( '#alert' ).html( 'That username is already in use' + existing +'. Please choose another.' );
$( '#alert' ).dialog( 'open' );
}else{ //<==========================================
var un = $.trim($( '#username').val());
var fn = $( '#first_name').val();
var ln = $( '#last_name').val()
if (un=='' || fn=='' || ln=='') {
$( '#alert' ).dialog({
height: 200,
width: 300,
});
$( '#alert' ).html( 'Fields marked with an asterisk are required.' );
$( '#alert' ).dialog( 'open' );
} else {
$("#cns_form").submit();
}
} //<===================================================
}
感谢和感谢Felix Kling this helpful post。
答案 1 :(得分:2)
可能会在HTML表单标记的函数调用中放入return false
。
<form>
<bunchOfElements />
<button onclick="checkUserName(); return false">Check Name </button>
</form>
此外,您可以使用
将该功能绑定到按钮的单击事件$(document).ready(function(){
$("#buttonID").bind('click', function(){
//do your thing
checkForm();
});
});
答案 2 :(得分:1)
在return false
下面的#register按钮点击功能的末尾添加checkForm()
。该按钮继续触发表单提交。当你有javascript函数处理时。