我的jQuery排队函数在第一次运行后失败
描述我想要的与上述代码:我有两个按钮。当我单击其中一个时,我想将值“2”发送到url,并在类status2中加载status2.php的内容,在3secs之后清空类status2。如果我单击另一个按钮,则依此类推。我认为上面的代码可以完成这项工作。我的jQuery排队函数在第一次运行后失败,jquery,Jquery,描述我想要的与上述代码:我有两个按钮。当我单击其中一个时,我想将值“2”发送到url,并在类status2中加载status2.php的内容,在3secs之后清空类status2。如果我单击另一个按钮,则依此类推。我认为上面的代码可以完成这项工作。 如果我在单击按钮时从回调中删除“()”,则只发送值“2”,而不会发生其他任何情况。要使其与动态添加的内容一起工作,请在上连接事件 <input id='lightson' class="buttonl" type="button" value=
如果我在单击按钮时从回调中删除“()”,则只发送值“2”,而不会发生其他任何情况。要使其与动态添加的内容一起工作,请在
上连接事件
<input id='lightson' class="buttonl" type="button" value="On" />
<input id='lightsoff' class="buttonl" type="button" value="Off" />
<p class="status2"></p>
<script type="text/javascript">
$('#lightson').click(function(){
$.get('http://<?php echo $_SESSION['ip']?>/?2', {}, callbacka());
function callbacka() {
$('.status2').load('status2.php').delay(3000).queue(function(){
$('.status2').empty().dequeue();
});
}
});
$('#lightsoff').click( function () {
$.get('http://<?php echo $_SESSION['ip']?>/?3', {}, callbackb());
function callbackb(){
$('.status2').load('status3.php').delay(3000).queue(function() {
$('.status2').empty().dequeue();
});
}
});
</script>
我成功地测试了这一点,但我不认为我能够让ajax负载正常工作:)不要将()
放在callbacka
/callbackb
之后。这将调用它们,并将$.get
的回调设置为返回值(在本例中为未定义的)
$('#lightson')。单击(函数(){
$.get(“http://2”);
callbacka();
} );
函数callbacka(){
$('.status2').load('status2.php').delay(3000).queue(function(){
$('.status2').empty().dequeue();
});
}
$('#lightsoff')。单击(函数(){
$.get('http://?3');
callbackb();
} );
函数callbackb(){
$('.status2').load('status3.php').delay(3000).queue(function(){
$('.status2').empty().dequeue();
});
}
我不认为#lightson
正在被重新加载。只有.status2
的内容。实际上,在load
回调中,this
是调用load
的DOM元素。从load
返回的数据作为第一个参数传递给回调函数。@Rocket-你说得对-谢谢。当然,调用setTimeout回调时,这个
是另一回事,这就是为什么我需要$status:)@Rocket-我想你是对的。我会相应地告诉你的。嗨,亚当。如果您不介意我说,虽然事件委派很好,但文档级别的事件委派通常不是最好的主意。在页面上进行的每次单击都需要针对与文档相关联的每个选择器进行测试。对于与一个特定元素关联的处理程序,通常最好直接绑定它,或者至少将委托缩小到更本地的容器中。:).delay()
适用于排队的任何对象。它不一定需要是动画。@amnotiam:除非我做错了什么,否则它似乎不适用于添加到队列中的任意函数@Rocket:我必须承认你的例子让我有点困惑,因为我不习惯使用自定义队列名称和传递函数数组。在这里,我去掉了数组,为delay
调用指定了自定义名称,并手动将内联出列。初始的delay
显然也需要手动退出队列,因为它不是默认的fx
队列的一部分。@amnotiam:Cool,因此delay
适用于所有队列,而不仅仅是fx
队列。
<input id='lightson' class="buttonl" type="button" value="On" />
<input id='lightsoff' class="buttonl" type="button" value="Off" />
<p class="status2"></p>
<script type="text/javascript">
$('#lightson').click(function(){
$.get('http://<?php echo $_SESSION['ip']?>/?2', {}, callbacka());
function callbacka() {
$('.status2').load('status2.php').delay(3000).queue(function(){
$('.status2').empty().dequeue();
});
}
});
$('#lightsoff').click( function () {
$.get('http://<?php echo $_SESSION['ip']?>/?3', {}, callbackb());
function callbackb(){
$('.status2').load('status3.php').delay(3000).queue(function() {
$('.status2').empty().dequeue();
});
}
});
</script>
$(document).on("click", "#lightson", function () {
var $status = $('.status2');
$status.load('status2.php', function() {
setTimeout(function() { $status.empty(); }, 3000);
});
}
$.get( 'http://<?php echo $_SESSION['ip']?>/?2', {}, callbacka );
$('.status2').load('status2.php', function() {
var $this = $(this);
setTimeout(function(){
$this.empty();
}, 3000);
});
<script type="text/javascript">
$( '#lightson' ).click( function () {
$.get( "http://<?php echo $_SESSION['ip']?>/?2" );
callbacka();
} );
function callbacka() {
$( '.status2' ).load( 'status2.php' ).delay( 3000 ).queue( function() {
$('.status2').empty().dequeue();
});
}
$( '#lightsoff' ).click( function () {
$.get( 'http://<?php echo $_SESSION['ip']?>/?3' );
callbackb();
} );
function callbackb() {
$( '.status2' ).load( 'status3.php' ).delay( 3000 ).queue( function() {
$( '.status2' ).empty().dequeue();
});
}
</script>