2013-02-14 78 views
0

我試圖當按下「Enter」鍵,而重點是在一個特定的文本框來運行一些JavaScript代碼綁定功能,回發。如果發生這種情況,我不希望頁面回發。 (但是,如果有人點擊提交按鈕,然後我希望頁面回傳,因爲它通常會。)防止與jQuery

我有以下內容的頁面:

<script type="text/javascript"> 
$(function() { 
    $('#txtInput').on('keyup', function (e) { 
     if (e.keyCode == 13) { 
      alert('enter was clicked'); 
      return false; 
     } 
    }); 
}); 
</script> 

<asp:TextBox ID="txtInput" runat="server" ClientIDMode="Static"></asp:TextBox> 
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmitClick" Text="Submit" /> 

我一直認爲return false;爲做到這一點的方式,但在這種情況下,它不工作。

我也試圖在我的javascript函數以下,但無濟於事。

$(function() { 
    $('#txtInput').on('keyup', function (e) { 
     if (e.keyCode == 13) { 
      e.cancel = true; 
      e.returnValue = false; 
      alert('enter was clicked'); 
     } 
    }); 
}); 

我的問題是:

1.爲什麼不這項工作?

2.我怎樣才能實現這一行爲?

+0

它可能是因爲keyup事件。理論上關鍵是已經上漲,所以事件已經發生。你有沒有嘗試用按鍵? – 2013-02-14 17:44:56

+0

@CarlosMartinezT,'keypress'事件,再加上'return false',是我唯一可以工作的東西。謝謝。你應該發佈這個答案。 – 2013-02-14 18:46:23

回答

1

您需要使用keypress事件,因爲它發生在密鑰被釋放之前,因此可以被取消。

引述評論:

這可能是因爲keyup事件的。從理論上講,關鍵是已經 起來,因此事件已經發生了。您是否嘗試過使用按鍵 而不是?

0

剛剛進行了測試,它只能與事件的keydown工作,當鬆開按鍵爲時已晚:

$(function() { 
    $('#txtInput').on('keydown', function(e) { 
     if (e.which == 13) e.preventDefault(); 
    }); 
}); 

FIDDLE

+0

不幸的是,這也不適合我。回發仍在發生。 – 2013-02-14 18:34:22

+0

@JeremyWiggins - 然後你做錯了什麼,因爲它應該工作得很好! – adeneo 2013-02-14 18:54:54

+0

我同意,但我不明白我怎麼會做任何其他的錯誤;我整個發佈了我的應用程序。我發現它可以在你的小提琴上工作,但是從一個asp.net應用程序,它仍然會回傳。雖然使用'keypress'而不是'keydown'似乎有效。 – 2013-02-14 19:02:25

0

您是否嘗試過使用e.PreventDefault()?對於這種情況,您可能還需要使用​​或keypress趕上默認事件。

<script type="text/javascript"> 
$(function() { 
    $('#txtInput').on('keydown', function (e) { 
     if (e.which == 13) { 
      e.PreventDefault(); 
      alert('enter was clicked'); 
     } 
    }); 
}); 
</script> 

你應該知道,雖然,通過打破鍵盤的功能,你是不是迎合無障礙標準,這可能使事情對某些用戶困難。確保您爲僅供鍵盤使用的用戶提供導航方式。

編輯:由於問題的性質(ASP.NET),您可能必須以不同的方式來解決此問題。

您可以a)看看這個問題:Canceling the default submit button in ASP.NET或b)應用上面的Javascript解決方案,但將其應用於整個文檔而不是元素。

我不會建議第二個,因爲它可能會破壞可訪問性用戶的功能。

+0

不幸的是,這對我也不適用。回發仍在發生。 – 2013-02-14 18:34:57

0
function PreventEnterKeyInTextBox(){ 
$('#txtInput').keypress(function(evt){evt=(evt)?evt:window.event; 
if(evt.keyCode==13){ 
    if($.browser.msie) 
     {evt.cancelBubble=true; evt.returnValue=false;} 
    else{evt.preventDefault();} 
}}); 
} 
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PreventEnterKeyInTextBox); 
//Or $(document).ready(function(){PreventEnterKeyInTextBox();});