当我更新到1.10.2版时,我开始对jQuery产生一些问题。
我一直在寻找答案,但这些方法似乎都没有用,我可能做错了什么。我真的很感谢你的帮助。
主要的问题是,单击事件并不等待validateAjax的结果,而只是说validateBaan是未定义的。我已经检查了validateAjax函数,输出的值为true或false,但我想到那时,单击事件已经转移。我希望单击事件等待validateAjax结果,然后继续。
单击事件:
$('#log-in').on('click', function() {
// triggers validateAjax
var validateBaan = validateAjax('fieldId', 'worker');
// every time I log it says undefined, even though it gets value
// (true or false), but too late
// console.log(validateBaan);
// this function works
var validateShift = checkInput({
shift: {
field: 'btn-group',
hasClass: 'active',
error: 'shifterror'
}
});
// when both are true take some action
if (validateBaan && validateShift) {
...
}
});
下面是validateAjax函数:
function validateAjax(fieldId, query) {
var output;
// field value
var fieldValue = $('#' + fieldId).val();
// sending ajax request
var ajaxQuery = $.ajax({
type: "GET",
url: "update.php",
data: 'checkup=checkup&baan=' + fieldValue
});
// based on the response, takes action
ajaxQuery.done(function(response) {
if (response.error) {
output = false;
$('.error-' + fieldId).html(response.error);
} else if (response.product) {
$.cookie('tab_name', response.product);
output = true;
} else {
output = true;
}
return output;
});
}
我尝试过在/那时使用jQuery,但是我没有设法让它正常工作。
在以前的jQuery版本中,我从来没有遇到过这样的问题,所以我会感谢所有的帮助。
发布于 2013-10-04 06:49:34
您可以使用回调函数,例如
$('#log-in').on('click', function() {
// triggers validateAjax
// pass anonymus function to be called when ajax is complete
var validateBaan = validateAjax('fieldId', 'worker', function(){
// every time I log it says undefined, even though it gets value
// (true or false), but too late
// console.log(validateBaan);
// this function works
var validateShift = checkInput({
shift: {
field: 'btn-group',
hasClass: 'active',
error: 'shifterror'
}
});
// when both are true take some action
if (validateShift) {
...
}
});
});
function validateAjax(fieldId, query, callback) {
var output;
// field value
var fieldValue = $('#' + fieldId).val();
// sending ajax request
var ajaxQuery = $.ajax({
type: "GET",
url: "update.php",
data: 'checkup=checkup&baan=' + fieldValue
});
// based on the response, takes action
ajaxQuery.done(function(response) {
if (response.error) {
output = false;
$('.error-' + fieldId).html(response.error);
} else if (response.product) {
$.cookie('tab_name', response.product);
//Call you function if condition is trure
callback();
}
});
}
发布于 2013-10-04 06:47:14
这是一个ajax,那么您可以尝试使用async: false
。
设置
async to false
意味着调用的语句必须在调用函数中的下一个语句之前完成。
由于不推荐,最有效的方法是使用callback
函数来处理它。
发布于 2013-10-04 06:47:25
将异步设置为false:
var ajaxQuery = $.ajax({
async: false,
type: "GET",
url: "update.php",
data: 'checkup=checkup&baan=' + fieldValue
});
这将等待ajax命令完成,然后再使用您的代码。
https://stackoverflow.com/questions/19174931
复制相似问题