2010-09-17 4 views
2

J'ai une liste déroulante qui montre les pays. Lorsque l'utilisateur sélectionne États-Unis ou Canada, une autre goutte apparaît. Tout fonctionne avec Firefox, mais pas avec Internet Explorer.jQuery ne fonctionne pas dans IE lors de la sélection d'un élément dans la liste déroulante

$(document).ready(function() { 
    $('.CountriesDropDown').change(changeAddressOptions); 
    // alert('loaded'); 
    // call change event in case value was cached from reset 
}); 

function changeAddressOptions(){ 
    // this is drop down 
    var jsThis = $(this); 
    var selectedVal = jsThis.val(); 

    var targetElementWrapper = jsThis.parents('li:first').siblings('.addressContentsWrapper'); 
    var elementToPopulate = targetElementWrapper.children('.addressContents'); 

    if (selectedVal == null || selectedVal == '') { 
     targetElementWrapper.fadeOut(); 
     elementToPopulate.empty(); 
    } 
    else { 
     var loadingImage = jsThis.siblings('.loadingImage'); 
     loadingImage.show(); 
     var bindingPrefix = extractBindingPrefix(jsThis); 
     if (selectedVal == 'US') { 
      var elementUrl = '/AddressInfo.aspx/UsAddressInfo/?bindingPrefix=' + bindingPrefix; 
     } 
     else if (selectedVal == 'CA') { 
     var elementUrl = '/AddressInfo.aspx/CanadaAddressInfo/?bindingPrefix=' + bindingPrefix; 
     } 
     else { 
      var elementUrl = '/AddressInfo.aspx/InternationalAddressInfo/?bindingPrefix=' + bindingPrefix; 
     } 
     targetElementWrapper.hide(); 
     elementToPopulate.empty(); 
     $(elementToPopulate).load(elementUrl, countryLoadComplete); 
    } 
} 

function countryLoadComplete() { 
    var wrapper = $(this).parents('.addressContentsWrapper:first'); 
    $(wrapper).fadeIn('fast', hideLoadingImage); 
} 

function hideLoadingImage() { 
    var loadingImage = $(this).siblings().find('.loadingImage'); 
    loadingImage.hide(); 
} 

function extractBindingPrefix(element) { 
    // hack - grab binding prefix from neighboring labe, since lastIndexOf never works; 
    var bindingPrefixHolder; 
    var bindingPrefix; 
    bindingPrefixHolder = $(element).siblings('.bindingPrefix'); 
    /// var lastPeriod = elementName.indexOf('.', 0); 
    // if (lastPeriod = -1) 
    //  bindingPrefix = ''; 
    //else { 
    // bindingPrefix = elementName.substring(0, lastPeriod); 
    // } 

    bindingPrefix = bindingPrefixHolder.html(); 
    return bindingPrefix; 
} 
+0

Quelle (s) version (s) d'IE avez-vous essayé? Mode de compatibilité activé/désactivé? –

+0

Appuyez sur F12 pour lancer Developer Tools dans IE8, puis déboguer votre script. Pour les versions précédentes d'IE, vous pouvez installer les outils séparément, autant que je m'en souvienne. – queen3

+0

En outre, Visual Studio peut déboguer du code javascript, lorsqu'il exécute webapp dans Internet Explorer. – queen3

Répondre

-1

Vous devez vous envelopper jQuery objets dans $() chaque fois que vous utilisez une fonction jQuery:

var jsThis = $(this); 
var selectedVal = jsThis.val(); 

devrait être

var jsThis = $(this); 
var selectedVal = $(jsThis).val(); 

Cela doit être fixé dans de nombreux endroits votre script.

+0

Ce n'est pas vrai. – queen3

+0

Il ne fonctionne toujours pas. C'est ce que j'ai maintenant. J'ai fait le changement comme vous l'avez demandé. S'il vous plaît gardez à l'esprit que je suis nouveau à jquery. Merci – user450950

+0

Je pense aussi qu'il a quelque chose à faire avec le timingout. il ya une disscustion ... http://stackoverflow.com/questions/459224/jquery-animate-and-browser-performance – user450950

Questions connexes