2013-03-08 5 views
2

Il ressemble à IE8 ne supporte pas la méthode Jquery .filter()-Why won't .filter() work in Internet Explorer 8?JQuery .filter() dans IE8

Je le code suivant qui filtre une liste déroulante

if($('#deliveryPostcodeEstimator').length > 0) { 
     $('.shippingregionselector').hide(); 
     $('#deliveryPostcodeEstimator') 
      .blur(function() { 
       //Set to default 
       $('select[name=country] option:last').prop('selected', true); 
       //var defaultPostcode = 'GL50'; 
       //$("select[name=country] option").filter(function() { 
       // return $(this).text() == defaultPostcode; 
       //}).prop('selected', true); 
       //Set to matching postcode value if set 
       $('select[name=country] option').filter(function(index) { 
        return ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4).trim()) 
       }).prop('selected', true); 
       //Submit 
       var thisForm = $(this).closest("form"); 
       thisForm.submit(); 
      }) 
      .keyup(function() { 
       $(this).val($(this).val().toUpperCase()); 
      }); 
     $('button.pcodechange').click(function() { 
      var thisForm = $(this).closest("form"); 
      thisForm.submit(); 
     }); 
    } 

La ligne de problème est

return ($(this).text() == $('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4).trim()) 

Ce qui donne l'erreur suivante

Object doesn't support this property or method Comment est-ce que je "envelopper dans un objet" comme suggéré dans le message précédent?

Merci

+3

jQuery.filter et Array.filter sont des choses différentes – dakait

+0

'Il ressemble IE8 ne prend pas en charge la .filter Jquery() method'-vous obtenir une erreur ou un message d'avertissement sur la console dans le débogage du navigateur outils? L'avez-vous déjà exécuté dans Chromer/FireFox? Avez-vous essayé de faire un [** fiddle **] (http://jsFiddle.net) pour vérifier si tout cela fonctionne là? – Nope

+0

OK. Alors peut-être ma question devrait être plus sur le modèle de «Comment puis-je obtenir cela pour travailler dans IE8? C'est bien dans Chrome/FF – Jeepstone

Répondre

4

Votre erreur est probablement en raison de votre appel .trim().

String.prototype.trim est pas disponible pour Internet Explorer 8 selon ce tableau: http://kangax.github.com/es5-compat-table/

Vous pouvez utiliser à la place jQuery.trim:

var search = $.trim($('#deliveryPostcodeEstimator').val().toUpperCase().substring(0,4)); 
$('select[name=country] option').filter(function(index) { 
    return $(this).text() == search; 
}).prop('selected', true); 

Vous pouvez également utiliser une solution pure javascript qui est décrit dans lien cernunnos:

.trim() in JavaScript not working in IE

+0

+1 Belle trouvaille. Indique également que dans la documentation MDN sous [** trim() - Compatibilité du navigateur **] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim#Browser_compatibility) – Nope

+0

Cela semble être la bonne réponse, et ce http://stackoverflow.com/questions/2308134/trim-in-javascript-not-working-in-ie pourrait être utile pour résoudre le problème – cernunnos

+0

En effet. C'est la bonne réponse. Merci pour les pointeurs! – Jeepstone

0

IE 9 et ultérieur support .filter()

Voici ce que vous pouvez faire: Définissez votre propre filtre.

if (!Array.prototype.filter) { 
    Array.prototype.filter = function (fun /*, thisp */) { 
    "use strict"; 

    if (this === void 0 || this === null) 
     throw new TypeError(); 

    var t = Object(this); 
    var len = t.length >>> 0; 
    if (typeof fun !== "function") 
     throw new TypeError(); 

    var res = []; 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) { 
     if (i in t) { 
      var val = t[i]; // in case fun mutates this 
      if (fun.call(thisp, val, i, t)) 
       res.push(val); 
     } 
    } 

    return res; 
}; 
}