我有一个指向html页面的链接列表。
<ul id="item-list">
<li><a href="assets/data/item1.html">Item 1</a></li>
<li><a href="assets/data/item2.html">Item 2</a></li>
<li><a href="assets/data/item3.html">Item 3</a></li>
<li><a href="assets/data/item3.html">Item 4</a></li>
</ul>
我有一个javascript(jquery),并且将html附加到我的文档中。
var request;
$('#item-list a').live('mouseover', function(event) {
if (request)
request.abort();
request = null;
request = $.ajax({
url: $(this).attr('href'),
type: 'POST',
success: function(data) {
$('body').append('<div>'+ data +'</div>')
}
});
});
我尝试过使用setTimeout(),但它没有像我想象的那样工作。
var request, timeout;
$('#item-list a').live('mouseover', function(event) {
timeout = setTimeout(function(){
if (request)
request.abort();
request = null;
request = $.ajax({
url: $(this).attr('href'),
type: 'POST',
success: function(data) {
$('body').append('<div>'+ data +'</div>')
}
});
}, 2000
);
});
如何在发送新请求之前告诉jquery在悬停时等待(500ms或1000ms或...)?
答案 0 :(得分:8)
我认为,或许不是中止请求,您应该使用变量控制ajax请求,例如,名为 processing=false
,这将被重置为false,成功/错误功能。
然后你只能在setTimeout中执行该函数,如果处理是假的。
类似的东西:
var request, timeout;
var processing=false;
$('#item-list a').live('mouseover', function(event) {
timeout = setTimeout(function() {
if (!processing) {
processing=true;
request = $.ajax({
url: $(this).attr('href'),
type: 'POST',
success: function(data) {
processing=false;
$('body').append('<div>'+ data +'</div>')
}
});
}
}, 2000);
});
答案 1 :(得分:2)
$.fn.extend( {
delayedAjax: function() {
setTimeout ($.ajax, 1000 );
}
});
$.fn.delayedAjax();
似乎工作但可能不是最漂亮的解决方案。此外,您需要添加一些代码来传递args&amp;如果你想要
的超时值答案 2 :(得分:2)
如果你愿意,你需要有一个可以作为倒数计时器的变量,鼠标输出事件也会被取消......
$(function(){
$("#item-list a").live("mouseover",function(){
var a = $(this);
a.data("hovering","1");
setTimeout(function(){
if (a.data("hovering") == "1") {
// this would actually be your ajax call
alert(a.text());
}
}, 2000);
});
$("#item-list a").live("mouseout",function(){
$(this).data("hovering","0");
});
});
答案 3 :(得分:-2)
这适合我...
$(show_id).animate({
opacity: 0
}, 5000, function() {
$(show_id).html(data)
});