IE8 i JQuery's trim ()

103

Używam trim () w następujący sposób:

if($('#group_field').val().trim()!=''){

Gdzie group_fieldjest elementem wejściowym typu tekst. Działa to w Firefoksie, ale kiedy próbuję go w IE8, wyświetla mi się ten błąd:

Message: Object doesn't support this property or method

Kiedy usuwam trim (), działa dobrze na IE8. Myślałem, że sposób, w jaki używam trim (), jest prawidłowy?

Dziękuję wszystkim za pomoc

Abs
źródło

Odpowiedzi:

199

Spróbuj tego zamiast tego:

if($.trim($('#group_field').val()) != ''){

Więcej informacji:

Sarfraz
źródło
1
Dzięki, myślałem, że funkcje JQuery można łączyć w łańcuchy i tak wszystkie działały!
Abs
38
@Abs: val()nie zwraca obiektu jQuery, więc łańcuch nie jest możliwy . Wywołałeś trim()metodę na łańcuchu, ale IE o tym nie wie String.trim.
janmoesen
FWIW, właśnie oblałem czyjąś weryfikację kodu, ponieważ używali składni OP. Oczywiście nie testowali w żadnej wersji MSIE.
Adrian J. Moreno
3
Na marginesie, jeśli testujesz MSIE8, nie ma on informacji o Array.indexOf (). Zamiast tego użyj jQuery.inArray ().
Stone
14

Powinieneś użyć w $.trimten sposób:

if($.trim($('#group_field').val()) !='') {
    // ...
}
Alex Gyoshev
źródło
10

Inną opcją będzie zdefiniowanie metody bezpośrednio Stringw przypadku jej braku:

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    //Your implementation here. Might be worth looking at perf comparison at
    //http://blog.stevenlevithan.com/archives/faster-trim-javascript
    //
    //The most common one is perhaps this:
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}

Wtedy trimzadziała niezależnie od przeglądarki:

var result = "   trim me  ".trim();
andreister
źródło
10

O ile wiem, JavaScript String nie ma metody trim. Jeśli chcesz użyć przycinania funkcji, użyj

<script>
    $.trim(string);
</script>
Bang Dao
źródło
3

Aby globalnie przyciąć dane wejściowe za pomocą tekstu przy użyciu jQuery:

/**
 * Trim the site input[type=text] fields globally by removing any whitespace from the
 * beginning and end of a string on input .blur()
 */
$('input[type=text]').blur(function(){
    $(this).val($.trim($(this).val()));
});
Złóg
źródło