Frage

ASP.NET 2.0, Test in FF3 und IE7.

Wenn ich drücken Sie die ‚Enter‘ Taste aus einem Textfeld die entsprechende „OnClick“ -Ereignis für die erste Image auf der Seite ausgelöst wird. Wenn ich das Bild Taste entfernen, löst es das nächste Image OnClick-Ereignis auf der Seite.

Von der Firebug-Konsole, wenn ich JavaScript verwenden Sie das Formular einreichen, dies nicht geschieht. Aber aus irgendeinem Grunde hitting eingeben aus der Textbox das in keinem Zusammenhang Image Ereignis auslöst.

Ich fand diese Frage denen hatte ein ähnliches Problem, aber die vorgeschlagene Antwort auf diese Lösung nicht, da ImageButtons keine „UseSubmitBehavior“ Eigenschaft auf sie hat nicht funktioniert.

Ich verstehe nicht, warum dieses Ereignis feuern wird. Wenn ich bei Request.Form aussehen, kann ich sehen, dass __EVENTTARGET leer ist, und es ist in der Tat der gesamten Formularinhalte (all meine Textfelder) zu veröffentlichen, sondern umfasst auch imageButton.x und imageButton.y Schlüssel / Wert-Paare.

Warum ist das? Ich glaube, ich könnte erkennen „Enter“ -Taste drückt aus diesen Textfeldern mit Javascript, aber meine Erfahrung in der Vergangenheit ist dieses Verhalten zwischen den Browsern sind sehr variabel. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Sie könnten versuchen, eine Standard-Schaltfläche in einem ASP-Panel oder auf dem Formular zu setzen. So können Sie kontrollieren, was passiert, wenn ein Benutzer die Enter-Taste trifft.

Andere Tipps

hier ist eine elegantere Lösung

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

Lesen Sie den gesamten Beitrag hier

Ich habe das gleiche Problem auf meinem Projekt.

Dieses Problem wird verursacht, weil ASP.NET immer davon aus, dass das erste Element, das von IButton Schnittstelle (Button und Image) erbt die Standard-Schaltfläche von der Seite.

Hipoteticaly, wenn Sie einen Linkbutton statt Knopf oder Image verwenden, dieses Problem gelöst wird.

Sie können mehr Informationen finden hier auf MSDN .

Sie können die Enter-Taste deaktivieren aus gedrückt wird, so wird der Benutzer auf Ihrer ImageButtons klicken müssen. Kopieren Sie einfach diesen Javascript-Block auf Ihrer Seite:

<script type="text/javascript">
function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
}
document.onkeypress = stopRKey;
</script>

Vor kurzem, ich habe mehr auf dem Client mit Web-Service und weniger Postbacks zu tun. Durch die Bewegung meiner Kontrollen außerhalb des Formelements (oder ganz beseitigen), geht das Problem weg. Es wird standardmäßig auf aspx Seiten eingefügt, aber es hat mich erst vor kurzem geschehen, dass ich es für viel von nicht brauchen, was ich tue.

Es ist das Standardverhalten für einen Tastendruck in einem Nicht-Textbereich betritt ein Formular posten. Sie würden es in einer JavaScript-Methode zu handhaben müssen, um das Postback zu stoppen.

Sie müssten nur die window.event.keyCode Eigenschaft zu überprüfen, um zu sehen, ob seine gleich 13. Wenn ja, setzen Sie ihn auf 0 zurück.

function KeyPress()
  {
     if (window.event.keyCode == 13)
        {
           window.event.keyCode = 0;
        }
  }
  

Ich glaube, ich könnte „Enter“ -Taste drückt aus diesen Textfelder mit Javascript erkennen

Das ist, was ich tue, um dieses Verhalten zu bekommen und es funktioniert super in IE7 und FF3. Es ist nur ein wenig unnatürlich.

Hier ist ein allgemeiner exemple:

    function TextBox1_KeyDown(sender, e)
    {
    var key;
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox
        if(key == 13 && $("#TextBox1").val() != "")
        {
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
        }
        return (key != 13);
    }

Ich habe WebForm_DoPostBackWithOptions weil ich Validatoren benötigt auszulösen. Andernfalls könnten Sie __doPostBack verwenden.

Hier sind die "Prototypen":

function __doPostBack(eventTarget, eventArgument)

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}

function WebForm_DoPostBackWithOptions(options)

Hoffe, es hilft.

P. S .: Ich habe hier JQuery aber $ das gleiche bekommen würde.

Hier ist eine elegante Lösung, die ich gefunden habe, falls jemand anderes dieses Problem hat (bei alle andere Lösung funktioniert nicht für Sie, da sie nicht für mich arbeiten):

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:Panel runat="server" DefaultButton="doNothingButton">
        <ul id="shopping-list-ul">
        </ul>
        <asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
    </asp:Panel>
</ContentTemplate>

Die Textbox iself war in der ul (erzeugt durch Javascript).
Drücken der Eingabetaste wird die „doNothingButton“ auslösen, die auf Client-Seite falsch zurück, überhaupt keine Postbacks verursachen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top