<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() {
$(this).empty();
});
}
});
$( '#lightsoff' ).click( function () {
$.get('http://<?php echo $_SESSION['ip']?>/?3', {}, callbackb());
function callbackb(){
$('.status2').load('status3.php').delay(3000).queue(function() {
$(this).empty();
});
}
});
</script>
当我点击lightson
时,我想加载一些东西到我的div
中,并在三秒钟后清空它。另外,当我单击lightsoff
时,我想加载其他东西,并在三秒钟后清空它,因为两个按钮使用相同的div
。
此代码只工作一次。当我的页面加载,我点击两个按钮之一(这并不重要,哪个按钮)它的工作,但如果我点击另一个按钮,它加载的信息在div
,但不清空它。
我的新代码是:
<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>
描述我想要的上面的代码:我有两个按钮。当我单击其中一个时,我想将值"2"发送到url,并在类status2中加载status2.php的内容,并在3secs后清空类status2。如果我点击另一个按钮。我认为上面的代码做的工作。如果我从回调中删除"()",当我点击按钮时,只发送值"2",其他什么都不发生。
不要把()
放在callbacka
/callbackb
之后。这将调用它们并将$.get
的回调设置为返回值(在您的示例中为undefined
)。
$.get( 'http://<?php echo $_SESSION['ip']?>/?2', {}, callbacka );
另外,delay
只适用于动画。要在load
完成后等待3秒,在load
回调中使用setTimeout
。
$('.status2').load('status2.php', function() {
var $this = $(this);
setTimeout(function(){
$this.empty();
}, 3000);
});
要使其与动态添加的内容一起工作,请将您的事件与on
连接
$(document).on("click", "#lightson", function () {
var $status = $('.status2');
$status.load('status2.php', function() {
setTimeout(function() { $status.empty(); }, 3000);
});
}
我成功地测试了这一点,但我不认为我能让ajax加载工作在一个fiddle:)
<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>