我有INPUT元素,我想重置之前的值(不是必需的原始值)。有两种方式:
对于#2,如何使用jquery创建ESC键?
答案 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;
}
});
});