2011-08-14 4 views
14

Jak mogę się dowiedzieć, czy przeglądarka obsługuje znacznik zastępczy HTML5, więc mogę zdecydować, czy podpiąć moją wtyczkę jQuery, czy nie.Obsługa HTML5 "placeholder"

Odpowiedz

17
var placeholderSupported = ('placeholder' in document.createElement('input')); 

zmiennej placeholderSupported będzie true jeśli jest on natywnie obsługiwane. W przeciwnym razie zostanie ustawiony na false.

+0

Dlaczego potrzebujesz !! w wyrażeniu? – hop

+0

@hop - Masz rację. Ja nie. Zaktualizowano. –

2

Aby uzyskać szeroki pomysł iść do:

http://caniuse.com/#search=placeholder

I przetestować w przeglądarce można zrobić:

function supportsPlaceholder() { 
    var i = document.createElement('input'); 
    return 'placeholder' in i; 
} 
1

pożyczyłem z odpowiedzi powyżej zrobiłem to tak, że jest kompatybilny wstecznie ze starszymi nowoczesnych przeglądarkach, a także IE -

z poniższym kodzie, upewnij się, że zarówno „wartość” i „zastępczy "zestaw atrybutów dla pól wejściowych. W moim konkretnym przypadku musiałem wspierać warianty IE.

Wyjaśnienie - Jeśli przeglądarka obsługuje symbol zastępczy, wartość wejściowa zostanie usunięta. Jeśli nie, starsze przeglądarki zignorują atrybuty zastępcze, a poniższy js naśladuje domyślne zachowanie zastępcze. Ten skrypt będzie także ignorował wszystkie tokeny uwierzytelnienia dla CSRF (otrzymywał błąd, w którym wartości tokenów auth zostały usunięte w moich formularzach powodując ostrzeżenie CSRF w moich aplikacjach Railsowych).

Innym sposobem na uproszczenie samego skryptu jest przypisanie klasy do każdego wejścia, którego chcesz użyć i zaktualizowanie prawdziwej instrukcji (chociaż poniższa metoda jest nieco bardziej sucha).

var placeholderSupported = !!('placeholder' in document.createElement('input')); 

if (placeholderSupported === true){ 
    $('input:not([type="submit"], [name="authenticity_token"])').val(''); 
} else{ 
    $('input') 
     .focus(function() { 
      if (this.value === this.defaultValue) { 
       this.value = ''; 
      } 
     }) 
     .blur(function() { 
      if (this.value === '') { 
       this.value = this.defaultValue; 
      } 
    }); 
}