2013-05-23 4 views
8

Diese Lösung wurde an this question gefragt, wie Sie eine HTML-Schaltfläche auslösen, wenn Geben Sie in einem Eingabefeld gedrückt wird.Warum ist diese Codezeile beim Klicken auf eine Schaltfläche mit JavaScript erforderlich?

<input type="text" id="txtSearch" onkeypress="searchKeyPress(event);" /> 
<input type="button" id="btnSearch" Value="Search" onclick="doSomething();" /> 

<script> 
function searchKeyPress(e) 
{ 
    // look for window.event in case event isn't passed in 
    if (typeof e == 'undefined' && window.event) { e = window.event; } 
    if (e.keyCode == 13) 
    { 
     document.getElementById('btnSearch').click(); 
    } 
} 
</script> 

Warum ist if (typeof e == 'undefined' && window.event) { e = window.event; } nescecary? Es scheint zu prüfen, ob das Argument nicht korrekt übergeben wurde, warum nicht? Bezieht sich dies auf die Behebung von Browserkompatibilitätsproblemen?

+4

Wegen altIE. Aber das ist in diesem Fall nicht notwendig, da Sie "Event" vom Inline-Handler übergeben. – bfavaretto

+0

Kurze Antwort, ja, es geht um Browserkompatibilität. –

+1

als ein Hinweis: Man sollte Inline-Handler vermeiden. Hier ist ein Artikel, der einige Gründe erklärt, warum: http://robertnyman.com/2008/11/20/why-inline-css-and-jascript-code-is-such-a-bad-thing/ – rlemon

Antwort

7

Da alte IE-Versionen sind eine schreckliche Abscheulichkeit, die eine globale Variable event anstelle eines Funktionsarguments wie jeder vernünftige Entwickler verwenden würde.

Aus dem gleichen Grund (die altenIE Entwickler sind verrückt) können Sie .addEventListener() nicht in oldIE verwenden, sondern stattdessen .attachEvent() verwenden.

Edit: Nur gesehen, dass Sie ein Inline-Event verwenden und immer das Ereignis übergeben. Auf diese Weise haben Sie immer ein gültiges Ereignisobjekt im ersten Argument Ihrer Funktion. Sie benötigen den zusätzlichen Code nicht.

+0

Was ist ein Inline Veranstaltung? – Celeritas

+1

'onkeypress =" einige Code hier "'. Unter https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener erfahren Sie, wie Sie es richtig machen. – ThiefMaster

Verwandte Themen