我有一个元素
<span id="current" data=""></span>
data
属性的值将由异步AJAX函数填充。我无法将此功能更改为同步或使其返回值。
这是代码的一部分
$("#popup #save").click(function () {
//setting a lot of vars here
var id = $("#current").val();
if (id == '') {
//new so insert
$.ajax({
type: "GET",
url: myurl,
data: "",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("#loadstatus").html('');
//returns new id
if (data > 0) {
$('#current').val(data);
}
}
});
}
else {
//existing so update
//more code
}
return false;
});
var id = $("#current").val();
if (id == '') {
//save
$("#popup #save").click(); //this function contains the AJAX call which also sets `$("#current").val()` with a value returned in that same AJAX call
//I can only set the value of id after the success of the aforementioned AJAX function
//so here I need to set some sort of timeout
id = $("#current").val();
}
我想执行另一个函数,但在该函数中我想等到属性data
不等于空。
我正在检查这个:http://javascriptisawesome.blogspot.com/2011/07/faster-than-jquerydocumentready-wait.html
但我更喜欢使用默认的jQuery。
我该怎么办?
答案 0 :(得分:4)
您可以轮询数据的值:
function check() {
if (!$('#current').attr('data')) {
return setTimeout(check, 1000);
}
// do work here
}
check();
答案 1 :(得分:0)
如果您能够将<span>
更改为<input>
,您将能够使用jQuery的.change()
活动,这将使您的生活更轻松。
<input id="current" value="" type="hidden" />
JS
$('#current').change(function(e){
myFunction();
});
答案 2 :(得分:0)
您可以使用超时定期检查该值是否不再为空。
http://jsfiddle.net/Delorian/1g932hj8/
注1:我将你的跨度改为了一个输入法,允许你在JS小提琴中更新它,但如果它是一个跨度,代码将正常工作。
注2:这是一个递归函数,它调用自己在睡眠2秒后重新检查该值。如果您正在实施此操作,则应该在特定情况下满足永久运行和清理或停止呼叫的需要。
var doSomethingOnceValueIsPresent = function () {
if ($('#current').val() != '')
{
alert('something!');
}
else
{
setTimeout(function(){
doSomethingOnceValueIsPresent()
}, 2000);
}
};
doSomethingOnceValueIsPresent();