2012-02-24 121 views
10

我有一個類似「email」的常見字段。我有JavaScript捕獲返回鍵(13)並提交表單,但在主機面板上使用defaultButton屬性時觀察到相同的效果。Firefox自動完成'自動完成'輸入'按鍵觸發在文本框上輸入

如果用戶在IE上並正在輸入他的電子郵件地址,然後按ENTER鍵從瀏覽器的內聯自動填充中選擇一項,則不會向Java按鈕發送按鍵。好。

然而,在Firefox上,文本框收到ENTER鍵並想提交表單,但這並不完整。

有沒有人知道如何停止這不是禁用自動完成?我無法找到一種方法來檢測按鍵實際上源於自動完成列表框。

我使用的是asp.net和jQuery。

編輯 - 澄清: 按自動填充中的項目輸入時不應提交表單。 IE的行爲是正確的(一次!)。

本身就是我的事件處理程序很簡單:關鍵了(試過按鍵太)

- 如果(e.which == 13)submitForm();

問題是,我不知道如何檢測到ENTER按實際從自動完成控制

+1

這可以幫助你嗎? http://stackoverflow.com/questions/270494/enter-button-does-not-submit-form-ie-only-asp-net – Niklas 2012-02-24 13:38:35

+0

我認爲這個問題源於e處理程序。您可以提供第一條評論。 – sinanakyazici 2012-02-24 13:43:04

+0

你可以顯示保持輸入的JavaScript。關鍵是在瀏覽器上處理不同 – Aristos 2012-02-24 14:02:54

回答

2

您可以存儲鍵上的字段的值,然後再次檢查鍵。如果一個按鍵的字符串中有不止一個字符,則可以安全地假定選擇了自動完成項目,並且應該忽略輸入。

唯一不適用的情況是當你有一個字段如:[email protected],並且你選擇的只有最後一個字母添加的自動完成項目時,回車鍵會無意中提交表單。

希望至少讓我們開始。我正在嘗試梳理一個防彈解決方案。我會更新,如果我找到一個。

編輯

螺絲上面。分類出來。如果在鍵盤上檢查輸入鍵,並且輸入字段值在兩個鍵向下/向上都不相同,則可以假定已選擇自動完成項目。

var loginCurrentInput = ''; 

$('input').keydown(function(e) { 

    loginCurrentInput = $(this).val(); 

} 

$('input').keyup(function(e) { 

    //if enter key pressed 
    if(e.keyCode == 13) { 

    //check for changed input value 
    if($(this).val() != loginCurrentInput) { 

     loginCurrentInput = $(this).val(); 
     return false; 

    } 

    $('#button').trigger('click'); 

    } 

}