重置INPUT没有FORM

时间:2010-01-16 22:43:00

标签: javascript jquery html keystroke

我有INPUT元素,我想重置之前的值(不是必需的原始值)。有两种方式:

  1. 将值保存在另一个变量中并再次将其拉出
  2. 按ESC键。但我不希望用户按ESC但单击按钮。
  3. 对于#2,如何使用jquery创建ESC键?

4 个答案:

答案 0 :(得分:6)

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

这基本上在onload期间将每个输入元素的原始值存储为remember类,并指示按钮具有reset类,以便在单击时恢复它。

答案 1 :(得分:2)

当你还在场内时,Esc会工作。

当您单击该按钮时,该字段将失去焦点,并且该值将存储在该字段中,因此您无法通过默认的浏览器过程撤消它。

你只能使用你提到的#1选项..

对于场的模糊(当您失去焦点时的事件),您应该存储该值,当您单击该按钮时,将恢复为存储的值。

答案 2 :(得分:2)

忘记生成按键等事件。虽然您可以(以各种非可移植的方式)创建事件并将它们路由到事件处理系统,但这只会导致调用适当的事件处理函数;它将使浏览器执行用户生成的操作(如击键或鼠标单击)的默认操作。

在任何情况下,你在Escape上重置的行为都是一个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);
});

答案 3 :(得分: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;
        }
    });
});