2009-09-26 22 views
6

Te pola tekstowe wyglądają świetnie i są powszechne w witrynach Web 2.0, takich jak Facebook.Wartość domyślna pola tekstowego Railsy znika po kliknięciu (i przyciemnieniu).

Zasadniczo zamiast etykietowania pola tekstowego można zaoszczędzić miejsce, umieszczając etykietę w polu tekstowym. Zazwyczaj tekst jest nieco przyciemniony, a gdy użytkownik kliknie w polu tekstowym, wartość domyślna znika, a kolor zmienia się na czarny lub zwykły, aby użytkownik mógł wprowadzić tekst.

Jak dotąd jest to jak byłem ich tworzenia:

# DEFAULT_VALUE = "email address" 

<%= f.text_field :email, 
     :style => "color:#aaa;", 
     :value => DEFAULT_VALUE, 
     :onfocus => "if(this.getValue()=='#{DEFAULT_VALUE}'){this.clear();this.style.color = '#000';}", 
     :onblur => "if(this.getValue()==''){this.setValue('#{DEFAULT_VALUE}');this.style.color = '#aaa';}" %> 

to w zasadzie działa. Ale zauważyłem, że jeśli wpiszesz coś w polu i prześlesz formularz, który się nie powiedzie, formularz przeładuje się z wpisanym tekstem (tak jak powinien), ale tekst jest niepoprawnie przyciemniony. Dzieje się tak również po kliknięciu w przeglądarce. Wyświetli się wprowadzony tekst (nie wartość domyślna), ale kolor tekstu jest przyciemniony.

Czy jest to prostszy sposób na rozwiązanie tego problemu? Dzięki!

+0

tylko osobliwości Brian, skąd masz stałą DEFAULT_VALUE? jak to ustawiłeś i gdzie? –

+0

Jest to stała, którą można zdefiniować w dowolnym miejscu. –

Odpowiedz

3

To dlatego

:style => "color:#aaa;", 

Należy dodać warunek, że kontrole wprowadzone wartości i wartość domyślną.

UPD: próbka klienta bocznej ckeck jQuery:

$(document).ready(function() { 
    $input = $('input#id'); 
    $input.css('color', $input.val() === DEFAULT_VALUE ? '#aaa' : '#000'); 
}) 
+0

Dobry pomysł, myślę, że musiałby to być sprawdzian po stronie klienta z javascript, prawda? Jeśli ktokolwiek może podać przykład tego, co byłoby niesamowite. –

+0

Pewnie. Zaktualizowano ... – Anatoliy

Powiązane problemy