2010-03-20 4 views
0

J'utilise jQuery pour afficher/masquer un conteneur div (#pluginOptionsContainer) et charger une page (./plugin_options.php) à l'intérieur avec les variables POST requises envoyées.Comment réparer mon code jQuery dans IE ?? Fonctionne dans Firefox

Quelles données POST est envoyé est basé sur la valeur d'une liste de sélection (#pluginDD) et le clic d'un bouton (#pluginOptionsBtn) ...

Il fonctionne très bien dans Firefox, mais ne fonctionne pas dans IE .. La '$ ("# pluginOptionsContainer"). load()' demande ne semble jamais finir dans IE - Je ne vois que le message de chargement pour toujours ...

bind(), vide() et append () tous semblent fonctionner correctement dans IE .. Mais pas charger() ..

Voici mon code:

// wait for the DOM to be loaded 
$(document).ready(function() { 

// hide the plugin options 
$('#pluginOptionsContainer').hide(); 

// This is the hack for IE 
if ($.browser.msie) { 
    $("#pluginDD").click(function() { 
    this.blur(); 
    this.focus(); 
    }); 
} 

// set the main function 
$(function() { 

    // the button shows hides the plugin options page (and its container) 
    $("#pluginOptionsBtn") .click(function() { 
    // show the container of the plugin options page 
    $('#pluginOptionsContainer').empty().append('<div style="text-align:center;width:99%;">Loading...</div>'); 
    $('#pluginOptionsContainer').toggle(); 
    }); 

    // set the loading message if user changes selection with either the dropdown or button 
    $("#pluginDD,#pluginOptionsBtn").bind('change', function() { 
    $('#pluginOptionsContainer').empty().append('<div style="text-align:center;width:99%;">Loading...</div>'); 
    }); 

    // then update the page when the plugin is changed when EITHER the plugin button or dropdown or clicked or changed 
    $("#pluginDD,#pluginOptionsBtn").bind('change click', function() { 
    // set form fields as vars in js 
    var pid = <?=$pid;?>; 
    var cid = <?=$contentid;?>; 
    var pDD = $("#pluginDD").val(); 
    // add post vars (must use JSON) to be sent into the js var 'dataString' 
    var dataString = {plugin_options: true, pageid: pid, contentid: cid, pluginDD: pDD }; 
    // include the plugin option page inside the container, with the required values already added into the query string 
    $("#pluginOptionsContainer").load("/admin/inc/edit/content/plugin_options.php#pluginTop", dataString); 
    // add this to stop page refresh 
    return false; 
    }); // end submit function 

}); // end main function 
}); // on DOM load 

Toute aide serait grandement appréciée! Je déteste IE!

Répondre

3

IE met parfois en cache des réponses. Vous pouvez vérifier en regardant les demandes que l'IE fait au serveur. Fiddler2 est un outil utile pour regarder les requêtes http.

Si vous remarquez que vous cliquez sur soumettre et que vous ne voyez aucune requête http, IE met en cache le résultat.

Si tel est le cas, vous pouvez ajouter un nombre aléatoire à l'URL pour mettre en cache le buste il:

$("#pluginOptionsContainer").load("url.php?random=" + Math.random()*99999, dataString); 
+0

A dû faire cela pour presque tous mes messages jQuery, assez ennuyeux que IE fait ça. –

+0

@ Tom Anderson: IE ne cache pas les réponses des requêtes POST, seulement GET. –

+0

Maintenant ça marche ... J'ai essayé ça avant, en utilisant une méthode légèrement différente de gernarating le nombre aléatoire et cela n'a pas fonctionné .. Mais son un FAIT! Merci beaucoup!! Merde, IE! – sc0ttman

0

IE est parfois pickier alors FF quand il s'agit de dupliquer ids élément. Vérifiez que tous les ID que vous utilisez sont utilisés une seule fois et qu'ils ne sont pas créés à nouveau pendant l'appel ajax.

+0

Ouais, j'ai remarqué que tout à l'heure, c'est une vraie douleur dans le cul! – sc0ttman

0

Si la mise en cache est le problème, puis essayez de définir cache = false dans la configuration ajax jquery de ...

$.ajaxSetup ({ 
     cache: false, 
    }); 
+0

Je l'ai fait, sans effet ... Mais jrallison a fourni la solution de travail .. Merci quand même. – sc0ttman

Questions connexes