2012-11-01 13 views
8

Mam następujący kod, więc gdy użytkownik wybierze pole wprowadzania wartość zniknie, ale wartość domyślna zostanie ponownie wstawione, gdy użytkownik kliknie go.jQuery wartość wejściowa fokus i rozmycie

 $(function() { 
      var defaultText = ''; 
      $('input[id=input]').focus(function() { 
       defaultText = $(this).val(); 
       $(this).val(''); 
      }); 
      $('input[id=input]').blur(function() { 
       $(this).val(defaultText); 
      }); 
     }); 

Jednak nie jest to dokładnie to, jak tego chcę. Jeśli użytkownik wstawi tekst, nie chcę, aby domyślny tekst zastąpił to, co użytkownik umieścił. Jestem również całkiem nowym użytkownikiem jQuery, więc każda pomoc będzie bardzo doceniana.

+0

Czy próbujesz umieścić symbol zastępczy? – nicooga

+0

Masz problem z ustawianiem i rozbrajaniem 'defaultText' ... na' focus' zmienia wartość 'defaultText' na dowolną wartość bieżącą wejścia. – doublesharp

Odpowiedz

17

W swojej metodzie focus() należy sprawdzić, czy jest równa defaultText przed usunięciem go, w swojej funkcji blur(), wystarczy sprawdzić czy val() jest pusty przed ustawieniem defaultText. Jeśli zamierzasz pracować z wieloma wejściami, lepiej użyć klasy niż ID, więc Twój selektor będzie input.input, gdy klasa będzie "wejściowa". Nawet jeśli był to identyfikator, można to nazwać jako input#input.

// run when DOM is ready() 
$(document).ready(function() { 
    $('input.input').on('focus', function() { 
     // On first focus, check to see if we have the default text saved 
     // If not, save current value to data() 
     if (!$(this).data('defaultText')) $(this).data('defaultText', $(this).val()); 

     // check to see if the input currently equals the default before clearing it 
        if ($(this).val()==$(this).data('defaultText')) $(this).val(''); 
    }); 
    $('input.input').on('blur', function() { 
     // on blur, if there is no value, set the defaultText 
     if ($(this).val()=='') $(this).val($(this).data('defaultText')); 
    }); 
}); 

Ustaw go w akcji pod numerem this jsFiddle.

+0

Nie mogę ustawić defaultText w funkcji, po prostu dlatego, że będzie on używany w wielu miejscach i nie chcę, aby plik js był ogromny. Czy jest jakaś praca, ponieważ bankomat, jeśli użytkownik coś wpisze, a potem kliknie wejście ponownie, zmieni się na "". – Karl

+0

@Karl to nie ustawia "defaultText" w funkcji. Czy chcesz, aby wartość domyślna była niezależnie od danych wejściowych po załadowaniu formularza? – doublesharp

+0

var defaultText = 'Twój domyślny tekst.'; To robi. Istnieją różne dane wejściowe, każdy z innym domyślnym tekstem. Potrzebuję go, aby nie czyścić danych wejściowych, jeśli użytkownik wstawił coś i kliknął, a następnie kliknął z powrotem. – Karl

1

W swojej obsługi rozmycia po prostu sprawdzić, czy użytkownik nie pisać nic, w takim przypadku umieścić z powrotem domyślny tekst, tak:

  $('input[id=input]').blur(function() { 
      if ($(this).val() == '') { 
       $(this).val(defaultText); 
      } 
     }); 
+0

Powinno być $ (this) .val() == ale dzięki, czuję się trochę głupio, że o tym nie myślę: P – Karl

+0

Tak, zauważyłem to zaraz po napisaniu i edytowałem moją odpowiedź później, aby to naprawić. Mam nadzieję, że to było dla ciebie przydatne. – Nelson

0

Stary pytanie + Nie lubię, kiedy ludzie oferują inne rozwiązanie zamiast rozwiązania mojego problemu, ale mimo to: użycie atrybutu zastępczego HTML z wtyczką jQuery rozwiązałoby problem.

Można również użyć atrybutów danych HTML i zapisać/odczytać z tego.

Powiązane problemy