2010-11-17 14 views
20

Ho una pagina aspx che postback quando non dovrebbe. ci sono due caselle di testo, due listbox e due pulsanti sulla pagina. se in qualsiasi momento viene premuto il tasto invio, il primo pulsante viene messo a fuoco e "cliccato" con conseguente perdita di selezione all'interno delle caselle di riepilogo.La pagina ASP.Net inserisce la chiave che provoca il postback

Come si disabilita questo? ci sono un sacco di tutorial su come catturare il pulsante di invio ed eseguire un metodo, ma potrei trovarne uno su come disabilitare semplicemente la funzione "fammi afferrare il primo pulsante che trovo e selezionalo" menzionata sopra.

+1

Vedi anche http://stackoverflow.com/questions/1934223/disabling-default-button-or-enter -key-in-asp-et-c-sharp – Rory

risposta

29
  • È possibile impostare la DefaultButton sul modulo o un pannello. In questo modo hai il pieno controllo di ciò che accade.
  • Set UseSubmitBehavior = "False" sui pulsanti. Questo disabilita "AutoPostback" su Invio.

Preferirei il secondo se volessi impedire completamente i Postback su Invio.

+0

Se è un imagebutton .. qual è la soluzione? – SRJ

+1

@SRJ: potresti usare invece un 'Immagine'. Oppure dai un'occhiata a questa domanda che risolve questo problema: http://stackoverflow.com/questions/1561400/how-to-disable-submit-behaviour-of-aspimagebutton –

+0

Utilizzo dello "" e dell'attributo del pulsante "UseSubmitBehavior" a false era la mia soluzione per un problema simile. Ecco un po 'della fonte: https://pastebin.com/9hXJBrmk –

1

Questo è il comportamento predefinito di un'applicazione Web, è possibile eseguire uno dei tutorial trovati e nascondere tale comportamento, semplicemente abbandonando l'invio.

19

stai usando jQuery?

in caso affermativo:

$(document).keypress(function(e) 
{ 
    if(e.keyCode === 13) 
    { 
     e.preventDefault(); 
     return false; 
    } 
}); 
+4

Non fermerebbe la chiave di invio dall'inserimento di una riga vuota nella textarea? –

+0

Si fermerebbe anche il comportamento di invio su invio premere quando lo stato attivo è in quella casella di testo in cui la stampa di invio dovrebbe richiamare l'invio ('i.e username/password textbox') – sohaiby

+0

Ottima soluzione. @sohaiby @Tony_Henrich È facile sostituire 'document' in un selettore che punta esattamente a quegli input in cui il tasto Invio deve essere soppresso. È anche facile, per quanto inutile, aggirare jQuery usando il semplice JS. – Roland

6

Utilizzare il codice seguente per disabilitare il tasto Invio che causa il postback. Questo pezzo di codice bloccherà il tasto invio in tutti i browser 4.0 precedenti, tranne quando si preme invio in un'area testo o sul pulsante Invia stesso.

<script language="JavaScript"> 
var nav = window.Event ? true : false; 
if (nav) { 
window.captureEvents(Event.KEYDOWN); 
window.onkeydown = NetscapeEventHandler_KeyDown; 
} else { 
document.onkeydown = MicrosoftEventHandler_KeyDown; 
} 

function NetscapeEventHandler_KeyDown(e) { 
if (e.which == 13 && e.target.type != 'textarea' && e.target.type != 'submit') { 
return false; 
} 
return true; 
} 

function MicrosoftEventHandler_KeyDown() { 
if (event.keyCode == 13 && event.srcElement.type != 'textarea' && 
event.srcElement.type!= 'submit') 
return false; 
return true; 
} 
</script> 
1
<body onkeydown = "return (event.keyCode!=13)"> 
3

solo mettere questo su di voi ASP.Net controllo TextBox:

<asp:TextBox ID="TextBox1" runat="server" 
    onkeydown = "return (event.keyCode!=13);" > 
</asp:TextBox> 
Problemi correlati