jquery очистити вхідне значення за замовчуванням


77

Як я можу очистити значення за замовчуванням форми введення onfocus onfocus за допомогою jquery і очистити його знову, коли натискається кнопка подання?

<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>

9
Чи не могли б ви placeholderзамість цього використовувати рідний атрибут? Існують різні полізаливки, які дозволяють працювати в старих браузерах.
— James Allardice

@JamesAllardice Чому ви не опублікували це як відповідь? Я думаю, що це найпростіше і найкраще рішення.
— желе

1
@jelies - я не публікував це як відповідь, оскільки, хоча він робить те саме, що і те, що намагається зробити OP, він насправді не відповідає, що не так з їх кодом. Але я згоден, це, безумовно, найпростіше рішення!
— James Allardice

Так, це хороша відповідь, і я підтримав її, але я не хочу використовувати тег заповнювача.
— viktor

Відповіді:


127

Ви можете використовувати це ..

<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>

Говорячи про власний код, проблема полягає в тому, що attr api jquery встановлюється параметром

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

а не так, як ви робили:

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

Я вирішив використати цю відповідь, оскільки вона видається найелегантнішою.
— viktor

1
thnx.i я новачок у jquery. це мій перший прийнятий тут асер, і в цілому третій (як ви, мабуть, можете
— зрозуміти

Чому $('.input').removeAttr('value')не працює?
— Almino Melo

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

});


Це неправильно $('.input').attr('value') = 'Email address';, повинно бути , $('.input').attr('value', 'Email address');як upvoted ця відповідь?
— Тоні Мішель Кабе

1
@ToniMichelCaubet Відредагував відповідь, дякую. Цей код все одно не був пов’язаний із запитанням. Я скопіював його з коду topicstarter.
— Саша

8

Якщо ви насправді не турбуєтеся про старіші браузери, ви можете просто використати новий placeholderатрибут html5 приблизно так:

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

2
"Якщо вас не турбує старіший браузер" ... ви можете заповнити placeholderатрибут, щоб він працював і в старих браузерах. Дивіться мій коментар до запитання та дивіться вікі Modernizr для інших прикладів.
— Джеймс Аллардіка,

Так, це правда, або ви можете просто написати трохи JQuery, щоб самостійно витягнути атрибут, якщо ви зацікавлені.
— DJ Forth

7
$('.input').on('focus', function(){
    $(this).val('');
});

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

3

Спробуйте:

  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);
  });

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.