2013-09-05 47 views
3

我有一個關鍵的問題javascript和asp.net防止回傳inputfield

我有它做了查找TextChanged事件這樣的控制輸入,但我想控制它當用戶確實輸入時

​​

這就是爲什麼我創建了這個JavaScript函數,它工作得很好。因爲它避免了在任何字符輸入

function EnterEvent(e) { 
     var keycode = (e.keyCode ? e.keyCode : e.which); 
     if (keycode == 13) { 
      return true; 
     } 
     else { 
      return false 
     } 
    } 

輸入回發然後我想,當文本框包含內容的控制,所以我改變了JS這樣。

function EnterEvent(e, ctrl) { 
     var keycode = (e.keyCode ? e.keyCode : e.which); 
     if (keycode == 13) { 
      return ctrl.value.length > 2; 
     } 
     else { 
      return false 
     } 
    } 

控制

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" /> 

但沒有任何反應。任何時候我都會輸入,頁面回傳。

我也是在代碼加載頁面

  TextBox1.Attributes.Add("onkeypress", "EnterEvent(event, this);"); 
      TextBox1.Attributes.Add("onkeyup", "EnterEvent(event, this);"); 
      TextBox1.Attributes.Add("onkeydown", "EnterEvent(event, this);"); 

我的頁面仍然在回車鍵做回發上添加了此背後。如果至少有3個字符,這個想法是停止輸入回傳。任何想法或另一種方法?

> -----------------編輯--------------------

我在EnterEvent之前添加了此功能

$(function() { 
     $(':text').bind('keydown', function (e) { 
      if (e.keyCode == 13) 
       e.preventDefault(); 
     }); 
    }); 

但它會在所有頁面中阻止Enter。輸入在全部不起作用。

> -----------------編輯2 --------------------

好吧,我成功了!正如我在之前的評論中所說的那樣,我試着像過去一樣添加一個虛擬按鈕控件,然後我從文本框中轉移事件並調用其單擊事件。 它不是在所有的清潔,但它的作品,我匆忙。謝謝你們所有人的回答。如果有人能幫助我仍然會感激。我會繼續回顧這個問題。謝謝。

function EnterEvent(e, ctrl) { 
     var keycode = (e.keyCode ? e.keyCode : e.which); 
     if (keycode == 13 && ctrl.value.length > 2) { 
      $('[id$=Button1]').click(); 
     } 
     else { 
      return false; 
     } 
    } 

<asp:TextBox ID="TextBox1" runat="server" onkeyup="EnterEvent(event, this)" /> 
<asp:Button ID="Button1" runat="server" OnClick="TextBox1_TextChanged" style="visibility:hidden;width:0;"/> 
+0

如果使用updatepanel並在codebehind事件中查看是否有超過3個字符,那麼該怎麼辦? – DatRid

+0

我剛纔那樣做了。回傳繼續,控制消失。 –

+0

呃好吧,你是如何設置你的觸發器? – DatRid

回答

2

嘗試:

e.preventDefault(); 

停止Enter事件。

我已經建立了一個小提琴手:

http://jsfiddle.net/rblaettler/Y3b8F/5/

難道這就是你想幹什麼? 只有當您有超過2個字符時纔會提交。

+0

我已經使用它,我得到了空對象或未定義。 –

2
<asp:TextBox ID="TextBox1" runat="server" onkeydown="return EnterEvent(event,this);" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged" /> 

function EnterEvent(e, ctrl) { 
      var keycode = (e.keyCode ? e.keyCode : e.which); 
      if (keycode == 13 && ctrl.value.length > 2) { 
       return false; 
      } 
      else { 
       return true; 
      } 
     } 
+0

它看起來不錯,但它不起作用。我認爲所有的答案都是正確的。我在想這是關於文本框的組成(autopostback和事件的變化)我要去嘗試隱藏的服務器按鈕和輸入文本html的骯髒和虛擬的技巧。 –

+0

我在我身邊測試過,它正在工作。是否將活動更改爲onkeydown? –

+0

是的,我試過了。看看我的帖子中的編輯2。謝謝 –

3

也有類似的需要,以防止輸入按鍵(雖然,我並不需要考慮輸入長度條件在這種情況下),發現這裏面解決了這個問題...如果您需要做的只是停止表單回發,則由於某人在文本區域中按下輸入而比添加整個腳本塊更簡單。

<asp:TextBox ID="tb_Input" runat="server" onkeypress="return event.keyCode != 13;"></asp:TextBox> 

以爲我會分享這個以防別人只是在搜索這個功能。