我试图获取div的值,然后使用jquery输出它。但是,它似乎不起作用。
这是我的代码:
<div id="container">
<p id="textbit"></p>
</div>
<script type="text/javascript">
$(document).ready(function() {
var barcode = $('#textbit');
var container = $('#container');
setTimeout(function() {barcode.text('1233')}, 5000);
barcode.each(function() {
if (barcode.html().length > 0) {
var codereader = barcode.text();
container.hide(100);
alert('The code is '+ codereader);
}
});
});
</script>
当我没有setTimeout函数时它会起作用,但将来会使用AJAX动态填充这个div。
非常感谢任何帮助!
答案 0 :(得分:0)
Javascript是单线程的,setTimeout
函数是异步函数。它并没有像你想象的那样延迟5000ms的代码执行。它只调度5000ms后执行的回调函数。
在安排要执行的回调后,javascript将继续执行setTimeout
函数下面的代码。执行回调后5000ms后,setTimeoutYou
下面的代码已经执行。当您尝试获取值时,html尚未设置,因为它已安排在5000毫秒后设置。
如果你想模拟AJAX时间延迟,你可以将获取值的代码移动到一个新函数中并在settimeout
回调中调用它。
$(document).ready(function() {
var barcode = $('#textbit');
var container = $('#container');
var success = function(){
barcode.each(function() {
if (barcode.html().length > 0) {
var codereader = barcode.text();
container.hide(100);
alert('The code is '+ codereader);
}
}
setTimeout(function() {
barcode.text('1233');
success();
});
}, 5000);
});
答案 1 :(得分:0)
在这种情况下,你需要检查&#34;完成&#34;承诺将在AJAX完成后执行。
同样如此。
$(document).ready(function() {
var barcode = $('#textbit');
var container = $('#container');
setTimeout(function() {
barcode.text('1233');
barcode.each(function() {
if (barcode.html().length > 0) {
var codereader = barcode.text();
container.hide(100);
alert('The code is '+ codereader);
}
});
}, 5000);
});
Ajax是异步的,执行将继续到下一行,稍后在完成时指向。提供的回调将被执行。您需要按顺序执行此操作。
答案 2 :(得分:0)
使用ajax完成事件:当ajax完成其任务时,此代码将运行
完成:功能(xhr,状态){
alert( "The request is complete! now u can get other function form here" );
getvalues();
}