2010-11-17 7 views
20

J'ai une page ASPX qui postback quand il ne devrait pas. il y a deux zones de texte, deux zones de liste et deux boutons sur la page. si, à tout moment, la touche d'entrée est enfoncée, le premier bouton est activé et "cliqué", ce qui entraîne une perte de sélection dans les listes.ASP.Net page entrer clé causant de retour

Comment désactiver ceci? Il ya des tonnes de tutoriels sur la façon de capturer le bouton d'entrée et d'exécuter une méthode, mais je pourrais en trouver un sur la façon de désactiver simplement la caractéristique «laissez-moi attraper le premier bouton que je trouve et cliquez dessus» mentionné ci-dessus.

+1

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

Répondre

29
  • Vous pouvez définir le DefaultButton sur le formulaire ou un groupe spécial. De cette façon, vous avez un contrôle total sur ce qui se passe.
  • Définissez UseSubmitBehavior = "Faux" sur vos boutons. Cela désactive le "AutoPostback" sur Entrée.

Je préférerais la seconde si je voulais empêcher les postbacks sur Enter complètement.

+0

Si c'est une imagebutton .. quelle est la solution? – SRJ

+1

@SRJ: vous pouvez utiliser 'Image' à la place. Ou jetez un oeil à cette question qui aborde ce problème: http://stackoverflow.com/questions/1561400/how-to-disable-submit-behaviour-of-aspimagebutton –

+0

En utilisant le "" et l'attribut du bouton "UseSubmitBehavior" à false était ma solution pour un problème similaire. Voici un peu de la source: https://pastebin.com/9hXJBrmk –

1

Ceci est le comportement par défaut d'une application web, vous pouvez prendre l'un des tutoriels que vous avez trouvé et masquer ce comportement, en abandonnant simplement le soumettre.

19

utilisez-vous jQuery?

le cas échéant:

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

Cela n'empêcherait-il pas la touche d'entrée d'insérer une ligne vide dans textarea? –

+0

Il serait également arrêter le comportement de soumission sur appuyez sur Entrée lorsque le focus est dans cette zone de texte où la presse d'entrée devrait invoquer le soumettre («i.e nom d'utilisateur/mot de passe» – sohaiby

+0

Grande solution. @sohaiby @Tony_Henrich Il est facile de remplacer 'document' par un sélecteur qui cible exactement les entrées où la touche Entrée doit être supprimée. Il est également facile, mais inutile, de contourner jQuery en utilisant JS. – Roland

6

Utilisez le code ci-dessous pour désactiver la touche d'entrée provoquant la publication. Ce morceau de code bloquera la clé d'entrée dans tous les navigateurs 4.0 ci-dessus, sauf si vous appuyez sur Entrée dans une zone de texte ou sur le bouton Soumettre lui-même.

<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

Rapprochez ceci sur vous ASP.Net contrôle TextBox:

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