2010-01-16 6 views
5

У меня есть элемент INPUT, и я хочу сбросить предыдущее значение (необязательное исходное значение). Есть 2 способа:Сброс INPUT без FORM

  1. Сохранить значение в другой переменной и вытащить его снова
  2. ключ
  3. Нажмите ESC. Но я не хочу, чтобы пользователи нажимали клавишу ESC, а затем нажимали кнопку.

Итак, для # 2, как я могу создать ESC-нажатие, используя jquery?

+0

Для будущих зрителей - есть по умолчанию Javascript свойство называется 'defaultValue'. Вы можете использовать 'input.value = input.defaultValue' для отдельных элементов. Во внешней переменной нет данных экономии времени, если она уже существует. – Shadow

ответ

5

Вот SSCCE:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2079185</title> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $(':input.remember').each(function() { 
        $(this).attr('data-remember', $(this).val()); 
       }); 
       $('button.reset').click(function() { 
        $(':input.remember').each(function() { 
         $(this).val($(this).attr('data-remember')); 
        }); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <input type="text" class="remember" value="foo"> 
     <button class="reset">Reset</button> 
    </body> 
</html> 

В основном это сохраняет исходное значение каждого элемента ввода с классом remember во время onload и инструктирует кнопку с классом reset для ее восстановления при каждом нажатии.

+0

+1 для использования attr вместо данных. Чище и эффективнее! – Ariel

+1

Совершенно допустимо иметь '' вне '

'. Это нормально для форм, которые не предназначены для отправки. Единственный недостаток заключается в том, что переключатели не правильно группируются. – bobince

+0

Вы правы! Исправлена. – BalusC

2

Esc работает, когда вы все еще находитесь внутри поля.

В момент нажатия кнопки, поле будет терять фокус и значение будет сохранено в поле, так что вы не можете отменить его через процедуру браузера по умолчанию ..

Вы можете использовать только вариант # 1 вы упоминаете ..

на размытие поля (событие, когда вы теряете фокус), вы должны хранить значение, и при нажатии на кнопку возврата к сохраненному один ..

2

Забудьте о генерации событий, таких как нажатия клавиш. Хотя вы можете (в разных непереносимых способах) создавать события и маршрутизировать их в систему обработки событий, это вызовет вызовы только для функций обработчика событий; он будет не заставляет браузер выполнять действия по умолчанию для пользовательского действия, например нажатия клавиши или щелчка мыши.

В любом случае, поведение, о котором вы говорите, с сбросом на Escape - это quirk IE: ни в одном другом браузере Escape не имеет никакого эффекта, и даже в IE это ненадежно. В частности, в обычной форме одно нажатие Escape теряет изменения с момента последнего фокуса, а два нажатия Escape в строке сбрасывают всю форму до начальных значений. Однако, если в форме есть <input type="reset">, одно нажатие Escape сбрасывает форму и фокусирует кнопку сброса. Это делает его еще проще, чтобы случайно потерять все, что вы набрали, и еще одна веская причина не включать кнопку сброса в ваши формы.

Итак, если вы хотите сбросить начальные значения, вы можете позвонить form.reset(). Если вы хотите сбросить только одно поле, вы можете установить input.value= input.defaultValue (или input.checked= input.defaultChecked для флажков/радиостанций и аналогично defaultSelected по опциям).

Если, однако, вы хотите значение, которое присутствовало в то время поле было последним сосредоточенным, как и IE ведет себя, когда нет кнопки сброса, вам придется сделать некоторые переменной вспоминание, например .:

var undonevalue= $('#undoable').val(); 
$('#undoable').focus(function() { 
    undonevalue= $('#undoable').val(); 
}); 
$('#undoer').click(function() { 
    $('#undoable').val(undonevalue); 
}); 
+0

На самом деле это ответ RIGHT/BEST. Спасибо за чистое и подробное объяснение. Вы сделали мой день :) :) –

1

Каждый элемент (вход, флажок, радио) имеет атрибут, который содержит значение по умолчанию, элемент был инициализирован. Этот сценарий работает не для предыдущих значений.

// pseudocode 
input.defaultValue; 
radio.defaultChecked; 
checkbox.defaultChecked; 

Чтобы установить значение по умолчанию для входа, нажав клавишу ESC:

$(document).ready(function(){ 
    // reset by pressing ESC with focus on input 
    $('input').keypress(function(e) { 
     if (e.keyCode == 27) { 
      this.value = this.defaultValue; 
     } 
    }); 
}); 
Смежные вопросы