2013-05-23 11 views
8

Questa soluzione è stata data a this question per chiedere come attivare un pulsante HTML quando Immettere viene premuto in un campo di input.Perché è necessaria questa riga di codice facendo clic su un pulsante con JavaScript?

<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> 

Perché è if (typeof e == 'undefined' && window.event) { e = window.event; } nescecary? Sembra che stia controllando se l'argomento non è stato passato correttamente, perché non dovrebbe? Questo è legato alla risoluzione dei problemi di compatibilità del browser?

+4

A causa di oldIE. Ma non è necessario in questo caso, dato che stai passando 'evento' dal gestore in linea. – bfavaretto

+0

Risposta breve, sì, riguarda la compatibilità del browser. –

+1

come nota: si dovrebbe evitare gestori in linea. ecco un articolo che spiega alcuni motivi per cui: http://robertnyman.com/2008/11/20/why-inline-css-and-javascript-code-is-such-a-bad-thing/ – rlemon

risposta

7

Perché le vecchie versioni di IE sono un orribile abominio che usa una variabile globale event invece di un argomento di funzione come qualsiasi sviluppatore sane userebbe.

Per lo stesso motivo (gli sviluppatori oldIE sono pazzi) non è possibile utilizzare .addEventListener() in oldIE, ma è necessario utilizzare .attachEvent().

Modifica: visto che si sta utilizzando un evento in linea e si passa sempre l'evento. In questo modo avrai sempre un oggetto evento valido nel primo argomento della tua funzione. Non hai bisogno del codice aggiuntivo.

+0

Cos'è un inline evento? – Celeritas

+1

'onkeypress =" codice qui "'. Vedere https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener per come farlo correttamente. – ThiefMaster

Problemi correlati