簡體   English   中英

重置INPUT沒有FORM

[英]Reset INPUT without FORM

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

  1. 將值保存在另一個變量中並再次將其拉出
  2. 按ESC鍵。 但我不希望用戶按ESC但單擊按鈕。

那么對於#2,如何使用jquery創建ESC鍵擊?

這是一個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以便在單擊時恢復它。

當你還在場內時,Esc會工作。

單擊該按鈕時,該字段將失去焦點,並且該值將存儲在該字段中,因此您無法通過默認瀏覽器過程撤消該值。

你只能使用你提到的#1選項..

對於場的模糊(失去焦點時的事件),您應該存儲該值,當您單擊該按鈕時,將恢復為存儲的值。

忘記生成按鍵等事件。 雖然您可以(以各種非可移植的方式)創建事件並將它們路由到事件處理系統,但這只會導致調用適當的事件處理函數; 不會使瀏覽器執行用戶生成的操作(如擊鍵或鼠標單擊)的默認操作。

在任何情況下,你在Escape上重置的行為都是一個IE怪癖:在其他瀏覽器中,Escape沒有任何效果,即使在IE中它也是不可靠的。 具體來說,在正常形式中,一個Escape印刷機自上次焦點后失去更改,並且連續兩次Escape按下會將整個表單重置為初始值。 但是,如果表單中包含<input type="reset"> ,則單個Escape按下將重置表單並聚焦重置按鈕。 這樣可以更容易地意外丟失您鍵入的所有內容,這也是不在表單中包含重置按鈕的另一個好理由。

因此,如果要重置為初始值,可以調用form.reset() 如果只想重置一個字段,可以設置input.value= input.defaultValue (或者input.checked= input.defaultChecked for checkboxes / radios,類似defaultSelected on options)。

但是,如果你想要在該字段最后一次聚焦時出現的值,因為IE在沒有重置按鈕時表現,你將不得不做一些變量記憶,例如:

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

每個元素(輸入,復選框,無線電)都有一個屬性,其中包含默認值,元素已初始化。 此方案不適用於以前的值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM