2012-10-31 7 views
33

Mam następujące formantu pola tekstowego asp.net.Zdarzenie Fire na klawisz Enter naciśnij pole tekstowe

<asp:TextBox ID="txtAdd" runat="server" /> 

Po użytkownik pisze coś w tym polu tekstowym i naciska ENTER klucz, chcę uruchomić jakiś kod z kodzie.

Co należy zrobić?

Korzystanie jQuery schwytany ENTER klucz i wystrzelił jakiś ukryty przycisk zdarzenie

$(document).ready(function(){ 
    $(window).keydown(function(e){ 
     if(e.keyCode == 13) $('#<% addbtn.ClientID %>'.click(); 
    }); 
}); 

Czy jest jakiś lepszy sposób?

Odpowiedz

30

ASPX:

<asp:TextBox ID="TextBox1" clientidmode="Static" runat="server" onkeypress="return EnterEvent(event)"></asp:TextBox>  
<asp:Button ID="Button1" runat="server" style="display:none" Text="Button" /> 

JS:

function EnterEvent(e) { 
     if (e.keyCode == 13) { 
      __doPostBack('<%=Button1.UniqueID%>', ""); 
     } 
    } 

CS:

protected void Button1_Click1(object sender, EventArgs e) 
    { 

    } 
+0

Innym rozwiązaniem jest dać asp: TextBox wyjątkowa klasa aw javascript wykonaj $ (". MyUniqueButtonClass") [0] .click(). Jest to nieco prostsze i mniej zależy od szczegółów implementacji asp.net niż __doPostBack. –

+0

Czy nie powinno to być 'UniqueID' zamiast' UniqueId'? Utknąłem z limitem 6 znaków dla edycji :( –

+0

Sue Maurizio - Popraw, proszę być UniqueID, naprawię to, dzięki –

5

ahaliav odpowiedź Fox „s jest poprawne, jednak nie jest to mały problem kodowania.
Zmień

<%=Button1.UniqueId%> 

do

<%=Button1.UniqueID%> 

jest wielkość liter. Control.UniqueID Property

Error 14 „System.Web.UI.WebControls.Button” nie zawierają definicji „UniqueId” i nie metodę rozszerzenia „UniqueId” zaakceptowaniem pierwszego argumentu typu „System.Web.UI.WebControls .Button "można znaleźć (czy brakuje instrukcji użycia lub odniesienia do zespołu?)

Nb Przed próbą znalezienia odpowiedzi sam próbowałem zdarzenie TextChanged na AutoPostBack i chociaż jest prawie poprawne, nie daje pożądanego rezultatu, którego chciałem, ani zadanego pytania. Pali się po utracie koncentracji na Textbox, a nie po naciśnięciu klawisza powrotu.

108
  1. Wrap pole tekstowe wewnątrz asp:Panel tagów

  2. Ukrywanie przycisku, który ma zdarzenie click, że robi, co chcesz zrobić i dać <asp:panel> się DefaultButton atrybut z ID ukryty przycisk.

<asp:Panel runat="server" DefaultButton="Button1"> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
    <asp:Button ID="Button1" runat="server" style="display:none" OnClick="Button1_Click" /> 
</asp:Panel> 
+14

O wiele bardziej poprawna odpowiedź niż akceptowana – KristianB

+8

to powinna być zaakceptowana odpowiedź –

+0

To dziękuje, dziękuję, – dps

0

Wypróbuj tę opcję.

zmiana że kodowanie udział w zdarzeniu Page_Load przed połowu IsPostBack

TextBox1.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('ctl00_ContentPlaceHolder1_Button1').click();return false;}} else {return true}; "); 
11

Można owinąć tekstowe i przycisk w ASP: panel i ustawić właściwość defaultButton Panelu do Id swojej przycisk Prześlij.

<asp:Panel ID="Panel1" runat="server" DefaultButton="SubmitButton"> 
    <asp:TextBox ID="TextBox1" runat="server" /> 
    <asp:Button ID="SubmitButton" runat="server" Text="Submit" OnClick="SubmitButton_Click" /> 
</asp:Panel> 

Teraz w każdej chwili koncentruje się w Panelu imprezą „SubmitButton_Click” zadziała gdy naciśnięciu ENTER.

+0

Identyfikator przycisku powinien być "btnSubmit" tak? – Muhammedh

2

mój jQuery zasilany rozwiązanie jest poniżej :)

Tekst Element:

<asp:TextBox ID="txtTextBox" ClientIDMode="Static" onkeypress="return EnterEvent(event);" runat="server"></asp:TextBox> 
<asp:Button ID="btnSubmitButton" ClientIDMode="Static" OnClick="btnSubmitButton_Click" runat="server" Text="Submit Form" /> 

Javascript za:

<script type="text/javascript" language="javascript"> 
    function fnCheckValue() { 
     var myVal = $("#txtTextBox").val(); 
     if (myVal == "") { 
      alert("Blank message"); 
      return false; 
     } 
     else { 
      return true; 
     } 
    } 

    function EnterEvent(e) { 
     if (e.keyCode == 13) { 
      if (fnCheckValue()) { 
       $("#btnSubmitButton").trigger("click"); 
      } else { 
       return false; 
      } 
     } 
    } 

    $("#btnSubmitButton").click(function() { 
     return fnCheckValue(); 
    }); 
</script> 
1
<asp:Panel ID="Panel2" runat="server" DefaultButton="bttxt"> 
    <telerik:RadNumericTextBox ID="txt" runat="server"> 
    </telerik:RadNumericTextBox> 
    <asp:LinkButton ID="bttxt" runat="server" Style="display: none;" OnClick="bttxt_Click" /> 
</asp:Panel> 

 

protected void txt_TextChanged(object sender, EventArgs e) 
{ 
    //enter code here 
} 
-1

Moja 2c .. Użyłem JavaScript, ale okazało się, że nie rzeczy, które nie były bardzo oczekiwane.

UŻYJ atrybutu/właściwości panelu defaultButton, jak sugeruje wiele z powyższych postów. Jest niezawodny (EASY) i działa we wszystkich przeglądarkach, na których go przetestowałem.

1

Spróbuj następująco: Aspx:

<asp:TextBox ID="TextBox1" clientidmode="Static" runat="server" onkeypress="EnterEvent(event, someMethod)"></asp:TextBox>  
<asp:Button ID="Button1" onclick="someMethod()" runat="server" Text="Button" /> 

JS:

function EnterEvent(e, callback) { 
     if (e.keyCode == 13) { 
      callback(); 
     } 
    } 
+0

To prawie dokładna kopia już zaakceptowanej odpowiedzi, w jaki sposób dodawałaby wartość do pytania? –

+0

Dziękuję Marco za komentarz. W moim przypadku było to rozwiązanie. Kiedy miałem różne kontrole i musiałem dać im to samo zachowanie. I mogłem użyć wszędzie tylko jednej uniwersalnej metody zamiast twardego kodu. Dzieliłem się tylko doświadczeniem, które wykorzystałem w moim projekcie. –

0
<input type="text" id="txtCode" name="name" class="text_cs"> 

i JS:

<script type="text/javascript"> 
$('.text_cs').on('change', function() { 
var pid = $(this).val(); 
console.log("Value text: " + pid); 
}); 
</script>