2

我注意到IE中有一個相當奇怪的行爲。帶有單個文本字段的HTML表單+防止在Internet Explorer中回發

我有一個HTML形式的單一輸入文本字段和一個提交按鈕

在提交單擊我需要執行一個客戶端的JavaScript函數,它的必要了。

現在,當我想阻止在文本字段回傳(上輸入按鍵)

我添加了一個按鍵JavaScript函數看起來像這樣:


<input type=text onkeypress="return OnEnterKeyPress(event)" /> 

function OnEnterKeyPress(event) { 
      var keyNum = 0; 
      if (window.event) // IE 
      { 
       keyNum = event.keyCode; 
      } 
      else if (event.which) // Netscape/Firefox/Opera 
      { 
       keyNum = event.which; 
      } 
      else return true; 
      if (keyNum == 13) // Enter Key pressed, then start search, else do nothing. 
      { 
       OnButtonClick(); 
       return false; 
      } 
      else 
       return true; 
     } 

Strangly這不起作用。


但是如果我通過的文本字段的功能:

<input type=text onkeypress="return OnEnterKeyPress(this,event);" /> 

function OnEnterKeyPress(thisForm,event) { 
      var keyNum = 0; 
      if (window.event) // IE 
      { 
       keyNum = event.keyCode; 
      } 
      else if (event.which) // Netscape/Firefox/Opera 
      { 
       keyNum = event.which; 
      } 
      else return true; 
      if (keyNum == 13) // Enter Key pressed, then start search, else do nothing. 
      { 
       OnButtonClick(); 
       return false; 
      } 
      else 
       return true; 
     } 

我能夠防止回發。

任何人都可以確認這裏發生了什麼?

HTML表單只有一個文本框和提交按鈕

所得o在提交時在一個單獨的div顯示在一個HTML文本區域執行的JavaScript功能/ P。

+0

lemme嘗試並在聲明中重新構建問題。 IE是否對單輸入類型=「文本」控件和提交按鈕的表單有任何問題。 – SudheerKovalam 2009-04-16 14:53:03

回答

8

找到了解決此問題的方法。

我剛發現在IE中,如果在一個表單中只有一個文本字段和一個提交按鈕,在表單提交中按下輸入結果。但是,如果有多個文本框,IE不會在輸入時自動回發表單,而是觸發按鈕的onclick事件。

所以我在表單中引入了一個隱藏文本字段,所有東西都可以神奇地工作。 我甚至不需要處理文本字段的onkeypress事件。

<Form> 
    <input type="text" /> 
    <input type="text" style="display:none"/> 
    <input type="submit" onClick="callPageMethod();return false;"/> 
</Form> 

這對我來說非常適合我!

這不是FF中的問題,因爲直接按Enter會導致調用提交按鈕的onclick事件。

0

在用於通過javascript提交表單的onsubmit中返回false。

+0

我不想提交表格。 Infact我想阻止表單提交,因爲我通過調用AJAX pagemethods來處理請求響應。 – SudheerKovalam 2009-04-17 02:24:07

0

必須與您尚未發佈的其他代碼進行一些交互。您的代碼會停止兩種變體中的表單提交,並且沒有理由不應該這樣做。

但是陷印輸入按鍵難以正確執行,並且很可能與其他任何東西一樣煩惱。幾乎總是有一個更好的方法。

例如,正如altCognito建議的那樣,'form.onsubmit'返回false,因此表單從不響應用戶交互提交。另外,如果您在onsubmit處理程序中將您的AJAX代碼(假設您正在執行的操作)代替onclick按鈕,也可以這樣做,即按Enter鍵與單擊submit按鈕具有相同的效果,用戶可能通常會期望。

如果你不想那麼做,似乎沒有理由包含< form>元素。如果你不希望瀏覽器將它們提交到任何地方,那麼僅僅擁有自己的輸入元素是完全有效的。

+0

另外我已經讀過,在IE中,如果在一個表單中,只有一個文本字段和一個提交按鈕,在表單提交中按下輸入結果。 但是,如果有多個文本框,IE不會自動回傳表單,而是觸發按鈕的onclick事件。 – SudheerKovalam 2009-04-17 02:14:32

+0

此行爲僅適用於IE。 – SudheerKovalam 2009-04-17 02:15:12

0

是否剛來到這裏的,因爲至少IE 7和8相關的觀察:

如果只有一個文本輸入和一個提交表單上的按鈕,用戶按下返回鍵,IE瀏覽器將不包括請求中的提交按鈕的名稱/值對。因此,只有文本輸入的值會在那裏。

如果我添加另一個文本輸入,則會發布文本輸入和提交按鈕的參數。第二個文本輸入甚至可以隱藏:<input type="text" style="display:none"/>

所以這是不是與事件相關,而是簡單的表單提交。

它發生在GET和POST。將選擇元素添加到表單不會改變行爲。 - 很奇怪。

1

嗨,你也可以禁用默認行爲。

jQuery('#yourInput').keydown(function (e) { 
    if (e.keyCode == 13) { 
    e.preventDefault(); 
    } 
}); 

乾杯!

相關問題