2010-01-16 45 views
5

我有INPUT元素,我想重置以前的值(不是必需的原始值)。有2种方式:没有FORM的复位INPUT

  1. 另一个变量保存价值,并再次将其拉出
  2. ,按ESC键。但我不希望用户按ESC键,而是点击一个按钮。

因此,对于#2,我如何创建一个ESC键击使用jQuery?

+0

对于未来的观众 - 有一个默认的JavaScript属性称为'defaultValue'。您可以在各个元素上使用'input.value = input.defaultValue'。当外部变量已经存在时,没有必要保存数据。 – Shadow 2013-07-22 01:50:40

回答

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> 

这基本上存储了onload期间每个输入元素的原始值和一个remember类,并指示该按钮的类别为reset以在每次点击时恢复它。

+0

使用attr代替数据+1。更清洁,更高效! – Ariel 2010-01-17 05:42:23

+1

在“

”之外有一个“”是完全有效的。对于无意提交的表单而言,这是正常的。唯一的缺点是单选按钮没有正确分组。 – bobince 2010-01-17 16:06:59

+0

你是对的!固定。 – BalusC 2010-01-17 17:40:43

2

当你还在场内时,Esc仍然有效。

的时刻,你按一下按钮,现场就会失去重点和值将被存储在外地,所以你无法通过默认的浏览器程序撤消它..

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

在球场上的模糊(事件当你失去焦点),你应该保存的价值,当你点击按钮返回到存储的一个..

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

其实这是正确/最佳答案。感谢您的清晰和详细的解释。你让我今天一整天都感觉很好 :) :) – 2010-08-24 11:18:02

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