2010-07-16 10 views
1

Je ne peux pas obtenir le code suivant pour travailler dans IE8, ça fonctionne bien dans Firefox.jQuery modal ne pas mettre à jour dans IE

Un utilisateur clique sur un lien pour ajouter une propriété à sa liste de favoris. Lorsque je clique sur ce bouton, j'utilise jQuery pour charger la page dans un modal. Si elles cliquent à nouveau sur le même lien, le code doit être réexécuté pour afficher "déjà ajouté". Dans IE, il affiche simplement la fenêtre modale d'origine et ne met pas à jour.

C'est très frustrant ... quelqu'un peut-il m'aider à le résoudre?

$(document).ready(function() { 
    var $loading = $('loading image goes here'); 

    $('.add_fav_property').each(function() { 
     var $dialog = $('<div></div>') 
      .append($loading.clone()); 
     var $link = $(this).bind('click', function() { 

      $dialog 
       .load($link.attr('href')) 
       .dialog({ 
        title: $link.attr('title'), 
        width: 400, 
        height: 150 
       }); 

      $link.click(function() { 
       $dialog.dialog('open'); 
       return false; 
      });    
      return false; 
     }); 
    }); 
}); 

Code jQuery de http://blog.nemikor.com/2009/08/07/creating-dialogs-on-demand/

Merci, Chris.

Répondre

0

J'ai rencontré un problème similaire avec IE et le chargement ajax. Fondamentalement, il est descendu à IE8 aime mettre en cache des choses et a refusé de montrer des données mises à jour. Changez votre fonction .load en .ajax et spécifiez "cache: false".

http://api.jquery.com/jQuery.ajax/

6

Vous avez quelques options, cela est tout au sujet de la mise en cache IE ici le résultat. Vous pouvez utiliser $.ajaxSetup() pour ne pas mettre en cache toutes jquery requêtes AJAX, comme ceci:

$.ajaxSetup({ cache: false }); 

Ou passer à une version $.ajax() complète de .load(), comme ceci:

$.ajax({ 
    cache: false, 
    url: $link.attr('href'), 
    dataType: 'html', 
    success: function(data) { 
    $dialog.html(data); 
    } 
}); 

Chacune de ces ajouter à votre La chaîne XXXXX est Date().getTime();. Cela empêche le navigateur d'utiliser le résultat mis en cache, car il pense que vous demandez une nouvelle page.

La troisième option est de faire vous-même, mais il semble comme un double emploi ou de travail, comme celui-ci:

var href = $link.attr('href'); 
$dialog 
    .load(href + (/\?/.test(href) ? "&" : "?") + "_=" + (new Date()).getTime()) 
    .dialog({ 
    title: $link.attr('title'), 
    width: 400, 
    height: 150 
    }); 
1

Le passage d'un objet de données vide (POST) à la fonction de charge force l'IE pour charger le contenu à chaque fois.

$('#div').load('http://url/whatever', {});