2010-01-16 46 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; 
     } 
    }); 
});