我正在构建我的第一个jquery插件,并希望有一些提示可以做得更好.我的代码中也有一个错误,我想摆脱它.我正在尝试通过我的ajax成功回调中的setTimeout刷新我的小部件的内容.它正在工作(没有参数)但我喜欢传递这样的论点
setTimeout(refresh(o.refresh), 5000);
Run Code Online (Sandbox Code Playgroud)
我不确定它是那样做的,但我遵循了我的直觉.我在firebug中有以下错误
无用的setTimeout调用(参数周围缺少引号?)
我不明白这个错误,因为提供给refresh函数的参数是一个变量.我需要传递一个参数来查看事件是由用户双击(窗口小部件切换打开)还是通过setTimeout方法触发(窗口小部件是打开的,所以不需要关闭它).我不确定我想做的事情是否可能.我可以通过为刷新选项添加条件ajax调用来解决我的问题,但我不想要重复的代码.希望任何人都可以给我一些提示'n'提示,不仅是因为我的错误,而且一般(插件开发).作为一个jquery启动器,我不确定我的代码是否传统.
和平
/**
* @author kasperfish
*/
(function($){
$.fn.extend({
widgetIt: function(options) {
var defaults = {
title: 'Widget Title',
load:'',
top: '50px',
left: '400px',
width: '500px',
afterLoad: function(){},
reload:false,
refresh:true
};
var options = $.extend(defaults, options);
var o=options;
return this.each(function() {
var container=$(this).css({'z-index':3, display:'inline-block',position:'absolute',top:o.top,left:o.left,'max-width':o.width})
.addClass('widget_container');
var header = $('<div></div>')
.addClass('ui-widget-header widgethead')
.css({'min-width':'130px'});
var title =$('<div></div>').addClass("w_tit").html(o.title);
var content =$('<div></div>')
.addClass("w_content")
.hide();
//append
$(title).appendTo(header) ;
$(header).appendTo(container) ;
$(content).appendTo(container) ;
//make draggable
$(container).draggable({
cancel: 'input,option, select,textarea,.w_content',
opacity: 0.45, …Run Code Online (Sandbox Code Playgroud) 我想做这样的事情:
for(var i=0;i<aList.length;i++)
{
aList[i].doSomething();
sleep(500);
}
Run Code Online (Sandbox Code Playgroud)
当然,javascript中没有睡眠功能所以我尝试了以下内容:
for(var i=0;i<aList.length;i++)
{
setTimeout(function(){
aList[i].doSomething();
},500);
}
Run Code Online (Sandbox Code Playgroud)
但是,现在它说没有定义aList [i].由于匿名函数是一个闭包,它实际上是从外部函数的范围读取aList [i],因此在运行setTimeout中的函数时,i已经发生了变化.
有什么方法可以实现这个目标?
可能重复:
setInterval()中的函数无延迟地执行
我试图每隔X几毫秒使用setTimeOut来调用calla函数,但它似乎只是吓坏了,无论我设置的时间范围如何都非常快?难道我做错了什么?
var Count = 0;
var GameRunning = 0;
var lblTimer = Titanium.UI.createLabel({
color:'#999',
text:'I am Window 1',
font:{fontSize:20,fontFamily:'Helvetica Neue'},
textAlign:'center',
width:'auto',
height: 25,
top: 25
});
var btnStartGame = Titanium.UI.createButton({
title: 'Start',
width: 50,
height: 25,
top: 75
});
function RunGame () {
Count++;
lblTimer.text = Count;
x = setTimeout(RunGame(), 100000);
}
function StartGame () {
if(GameRunning==0)
{
GameRunning = 1;
RunGame();
}
else
{
// Stop the game.
GameRunning = 0;
Count = 0; …Run Code Online (Sandbox Code Playgroud) 这似乎不对,但这就是Firefox似乎在行动的方式.
setTimeout(print(),5000);
function print(){
console.log(1);
}
Run Code Online (Sandbox Code Playgroud)
在5秒钟之前,在单击链接之后并且在下一页开始渲染之前,将向控制台打印1.有任何想法吗?谢谢!
编辑:重新命名,以显示示例代码中存在错误,而不是firefox行为.
使用setInterval/setTimeout,如何确保我的函数FINISH在等待一段时间后再执行,然后再执行,然后等待,等等.谢谢.
我有一个简单的JavaScript函数,如下所示:
countDown();
function countDown() {
var count = 10;
document.write(count);
if (count > 0) {
count = count-1;;
setTimeout(countDown, 1000);
}
}Run Code Online (Sandbox Code Playgroud)
为什么变量count永远不会改变?这个功能永远不会结束 ..
我有一个执行ajax GET请求的函数,它返回成功或错误响应.在成功响应中,我再次调用相同的功能,但在2秒后.为此,我有以下代码.
function check_something()
$.ajax({
type: 'GET',
url: '/something',
success: function(data){
setTimeout(check_something(),2000);
},
error: function(response) {
if(response.status == 401){
//do something else
}
}
});
};
$(function(){
check_something();
});
Run Code Online (Sandbox Code Playgroud)
但是从网络控制台日志和服务器日志看起来,"/ something"的请求速度超过2秒.我看到请求在10或12毫秒后传入.
一段代码有什么问题?
我需要在for循环中获取此代码.所以我不必写4次,我只是无法使其工作.
setTimeout(
function(){
document.getElementById("square").style.left="0px";
},0);
setTimeout(
function(){
document.getElementById("square").style.left="100px";
},1000);
setTimeout(
function(){
document.getElementById("square").style.left="200px";
},2000);
setTimeout(
function(){
document.getElementById("square").style.left="300px";
},3000);
Run Code Online (Sandbox Code Playgroud)
我到目前为止的回答是这样的
for (i = 0; i <=300; i=i+100) {
j = i*10;
setTimeout(
function (){
document.getElementById("square").style.left=i+"px";
}, j);
};
Run Code Online (Sandbox Code Playgroud) 当我在控制台中运行以下代码时:
for(var k = 0; k < 36; k++){
setTimeout(function(k){ alert(k)}, k*5000);
}
Run Code Online (Sandbox Code Playgroud)
警报显示未定义.此外,我希望在每次迭代后增加超时功能的延迟; 但这不会发生.超时功能应在5秒后首先运行,然后在10秒后再运行15秒,依此类推.
为什么未定义警报,为什么在每次迭代后没有延迟增加?
由于k在本地超时功能范围内,它应该在其内部可见.
我需要创建一个脚本,它将发送请求(数组中的数据)连续发送到服务器并获得响应,但我还需要在每第5或第6次迭代之间进行延迟(大约3-5秒).例如:
1st data
2nd data
3rd data
4th data
5th data
** 5sec. delay - wait here**
6th data
7th data
...etc...
Run Code Online (Sandbox Code Playgroud)
发送和接收数据没问题,但是我无法在我的代码中正确实现setTimeout以便完全按照我的需要工作.
非常感谢大家,他们将能够修复此代码.
<!DOCTYPE html>
<html>
<body>
<h2>AJAX</h2>
<button type="button" onclick="loadDoc()">Request data</button>
<p id="demo"></p>
<script>
function loadDoc() {
var xhttp = [];
var code = [
"WOICEL0Q9P",
"ZJTS4GYJEJ",
"HJPMQOCX31",
"MP26N0BH01",
"7TJNYZIRJR",
"Z5MIDDG4N2",
"BX6MKYK0O7",
"KVFVH1ESQX",
"40ADY3ZBE5",
"V4NT360JR5",
"FDI8AFL680",
"ZH89N59XQR",
"M6OS2OX38H",
"D8O76YDLM0",
"86GBMJLIXY",
"1QRFVU26VK",
"HFUI9QV6DY",
"VN83OGR825",
"DDMPCBX2MF",
"2M3QFPI234"
];
var i = code.length;
var j = code.length; …Run Code Online (Sandbox Code Playgroud) settimeout ×10
javascript ×9
function ×2
setinterval ×2
closures ×1
firefox ×1
for-loop ×1
jquery ×1
mobile ×1
scope ×1
titanium ×1
while-loop ×1