2012-08-01 12 views
43

Jak mogę wyczyścić domyślną wartość formularza wejściowego przy pomocy jquery i wyczyścić go ponownie po naciśnięciu przycisku przesyłania?jquery wyczyść domyślną wartość wejściową

<html> 
     <form method="" action=""> 
      <input type="text" name="email" value="Email address" class="input" /> 
      <input type="submit" value="Sign Up" class="button" /> 
     </form> 
</html> 

<script> 
$(document).ready(function() { 
    //hide input text 
    $(".input").click(function(){ 
     if ($('.input').attr('value') == ''){ 
      $('.input').attr('value') = 'Email address'; alert('1');} 
     if ($('.input').attr('value') == 'Email address'){ 
      $('.input').attr('value') = ''} 
    }); 
}); 
</script> 
+6

Czy zamiast tego można użyć natywnego atrybutu 'placeholder'? Dostępnych jest wiele [polyfills] (https://github.com/jamesallardice/Placeholders.js), aby działały w starszych przeglądarkach. –

+0

@JamesAllardice Dlaczego nie zamieściłeś tego jako odpowiedzi? Myślę, że jest to najłatwiejsze i najlepsze rozwiązanie. – jelies

+0

@jelies - Nie pisałem tego jako odpowiedzi, ponieważ podczas gdy robi to samo, co OP próbuje zrobić, to tak naprawdę nie odpowiada na to, co jest nie tak z ich kodem. Ale zgadzam się, to zdecydowanie najłatwiejsze rozwiązanie! –

Odpowiedz

83

Można to wykorzystać ..

<body> 
    <form method="" action=""> 
     <input type="text" name="email" class="input" /> 
     <input type="submit" value="Sign Up" class="button" /> 
    </form> 
</body> 

<script> 
    $(document).ready(function() { 
     $(".input").val("Email Address"); 
     $(".input").on("focus", function() { 
      $(".input").val(""); 
     }); 
     $(".button").on("click", function(event) { 
      $(".input").val(""); 
     }); 
    }); 
</script> 

Mówiąc o swoim własnym kodem, problemem jest to, że api atr jQuery jest ustawiony przez

$('.input').attr('value','Email Adress'); 

a nie, jak to zrobić:

$('.input').attr('value') = 'Email address'; 
+0

Zdecydowałem się użyć tej odpowiedzi, ponieważ wydaje się ona najbardziej elegancka. – viktor

+1

thnx.i sam jestem nowy w jquery.this jest moim pierwszym akceptowanym anserem tutaj i trzecim ogólnie (jak można prawdopodobnie wywnioskować dzięki moim punktom reputacyjnym) – Kaustubh

+0

Dlaczego '$ ('. Input'). RemoveAttr ('value')' nie działa? –

3

Spróbuj tego:

var defaultEmailNews = "Email address"; 
    $('input[name=email]').focus(function() { 
    if($(this).val() == defaultEmailNews) $(this).val(""); 
    }); 

    $('input[name=email]').focusout(function() { 
    if($(this).val() == "") $(this).val(defaultEmailNews); 
    }); 
3
$('.input').on('focus', function(){ 
    $(this).val(''); 
}); 

$('[type="submit"]').on('click', function(){ 
    $('.input').val(''); 
}); 
6

chyba że naprawdę martwi się o starszej przeglądarce można po prostu użyć nowego HTML5 zastępczy atrybut tak:

<input type="text" name="email" placeholder="Email address" class="input" /> 
+2

"Jeśli naprawdę nie martwisz się starszą przeglądarką" ... możesz polyfillować atrybut "placeholder", aby działał również w starszych przeglądarkach. Zobacz mój komentarz na pytanie i zobacz [Modernizr wiki] (https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills) dla innych przykładów. –

+0

Tak, to prawda, lub możesz po prostu napisać trochę JQuery, aby pobrać atrybut, jeśli jesteś zainteresowany. –

10
$(document).ready(function() { 
    //... 
//clear on focus 
$('.input').focus(function() { 
    $('.input').val(""); 
}); 
    //clear when submitted 
$('.button').click(function() { 
    $('.input').val(""); 
}); 

});

+0

To jest złe '$ ('. Input'). Attr ('value') = 'Adres e-mail';', powinno być '$ (" input "). Attr ('value', 'Email address'); "w jaki sposób została wznowiona ta odpowiedź? –

+1

@ToniMichelCaubet Zmieniono odpowiedź, dziękuję. Ten kod i tak nie był związany z pytaniem. Skopiowałem to z kodu w serwisie topicstarter. –

2

Wystarczy skrótowym

$(document).ready(function() { 
    $(".input").val("Email Address"); 
     $(".input").on("focus click", function(){ 
      $(this).val(""); 
     }); 
    }); 
</script> 
Powiązane problemy