2017-11-17 6 views
2

Ich bin auf ein Problem gestoßen, das ich ziemlich merkwürdig finde, obwohl ich noch Javascript lerne. Ich möchte einige Berechnungen nur durchführen, wenn ein Wert für einen Zustand gesetzt ist, wenn der Zustand nicht gesetzt ist, dann möchte ich das Formularfeld fokussieren.HTMLElement focus() Methode Uncaught TypeError

Nun ist die Frage, dass der Code unten nicht

document.getElementById('cart-hplus').addEventListener('submit', estimateTotal); 

function estimateTotal(event) { 
    event.preventDefault(); 

    var state = document.getElementById('s-state').value; 
    if (state === '') { 
     alert("Please choose your preferred shipping state."); 

     state.focus(); 
    } 
} 

Uncaught TypeError: state.focus is not a function

funktioniert, aber das funktioniert, aber ich glaube nicht, dass eine Variable deklariert dann gute Gewohnheit ist wieder das Dokument-Objekt in meinem wenn Anweisung

function estimateTotal(event) { 
    event.preventDefault(); 

    var state = document.getElementById('s-state').value; 
    if (state === '') { 
     alert("Please choose your preferred shipping state."); 

     document.getElementById('s-state').focus(); 
    } 
} 

Was ist falsch mit dem ersten Code?

+3

'state' ist String, wie Sie auf dem Element' .value' zu ​​bekommen. Entfernen Sie '.value' und verwenden Sie' state.value' in der 'if'-Bedingung. – Tushar

+2

Speichern Sie die Referenz des Elements in einer Variablen 'var state = document.getElementById ('s-state');' verwenden Sie dann 'state.value' und' state.focus() ' – Satpal

+0

Danke Leute, ich sehe, wo der Fehler kam von. Ich verstehe es jetzt besser. @Satpal schöne Erklärung. – Mena

Antwort

3

Sie unterscheiden nicht zwischen der Statuseingabesteuerung und dem Statuswert. Sie müssen 2 Variablen verwenden:

function estimateTotal(event) { 
    event.preventDefault(); 
    var state = document.getElementById('s-state'); 
    var stateValue = state.value; 
    if (stateValue === '') { 
     alert("Please choose your preferred shipping state."); 
     state.focus(); 
    } 
} 

Auch die Art, wie Sie es haben, ist in Ordnung. Es ist nichts falsch daran, das Objekt zweimal zu referenzieren.

+0

Schätzen Sie die Lektion, ich habe Korrekturen an meinem Code vorgenommen und es funktioniert jetzt. – Mena

+0

Großartig! Gut zu hören. –

5

In Ihrem ersten Code machen folgende Änderung,

document.getElementById('cart-hplus').addEventListener('submit', estimateTotal); 

function estimateTotal(event) { 
    event.preventDefault(); 

    var state = document.getElementById('s-state'); 
    if (state.value === '') { 
     alert("Please choose your preferred shipping state."); 

     state.focus(); 
    } 
} 
+1

Mit single var ist es eine gute Antwort auf die Frage. – KunJ

Verwandte Themen