Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I stop IE7-8 from caching the display of this jQuery function?

I'm using the function below to show a random quote in #quotescontainer each time there is a tab change in jQuery Tabs UI. Works fine in everything except IE7-8 (of course).

What happens in IE7-8 is the first quote is displayed and a second, random quote appears in #quotescontainer right below the first quote. In all other browsers, only one quote shows and it rotates on tab change. So IE is grabbing the first quote in div.quote from quotes.html, showing it and also showing a random quote underneath the first quote.

What can I try to force IE to correctly swap the quotes? And not get 'stuck" on the first quote?

Is this a cache prooblem? Or a problem with the function always reading quote1 and appending quote2 below it?

I'm not using caching in .htaccess. I've tried adding $.ajaxSetup({cache: false}); in the function with no luck.

6/01/11 fix; issue was some html inside the <div class="quote">quote text</div> in quotes.html. Somehow, that was breaking IE7-8.

jsfiddle: http://jsfiddle.net/YAEe5/28/

My function: with help from Matthew Ratzloff below

    select: function(event, ui) {

    var random = Math.floor(Math.random() * (Math.pow(2, 32) - 1));
  $('div#quotescontainer').load('http://mydomain.com/quotes.html?' + random, function() {
    var quotes = $(this).find('div.quote');
    var index = Math.floor(Math.random() * quotes.length);
    quotes.hide().eq(index).fadeIn();
  });

quotes are displayed on the page in #quotescontainer

quotes.html contains this:

<div class="quote">Quote1</div>
<div class="quote">Quote2</div>
<div class="quote">Quote3</div>
like image 733
markratledge Avatar asked May 13 '11 16:05

markratledge


1 Answers

This is a complete, tested, working example of what you want to do. You should be able to pull everything inside of the $(document).ready function into your select handler.

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
</head>
<script>
$(document).ready(function() {
  var random = Math.floor(Math.random() * (Math.pow(2, 32) - 1));
  $('div#quotescontainer').load('quotes.html?' + random, function() {
    var quotes = $(this).find('div.quote');
    var index = Math.floor(Math.random() * quotes.length);
    quotes.hide().eq(index).fadeIn();
  });
});
</script>
<div id="quotescontainer"></div>
</html>
like image 64
Matthew Ratzloff Avatar answered Oct 21 '22 22:10

Matthew Ratzloff