I have a list of links which point to html pages.
<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>
And I have a JavaScript(jQuery) which receives and appends the html to my document.
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>')
}
});
});
I've tried to work with setTimeout() but it does not work as I expected.
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
);
});
How can I tell jQuery to wait (500ms or 1000ms or …) on hover before sending the new request?
I think that perhaps instead of aborting the request, you should control the ajax requests with a variable, for example, called processing=false
, that would be reset to false, in the success/error function.
Then you would only execute the function in setTimeout, if processing was false.
Something like:
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);
});
$.fn.extend( {
delayedAjax: function() {
setTimeout ($.ajax, 1000 );
}
});
$.fn.delayedAjax();
Seems to work but probably not the prettiest solution. Also, you need to add some code to pass the args & the timeout val if you want
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With