Einstellung Fokus auf input-element auf Fehler bei der überprüfung nicht funktioniert
Ich habe eine lange Liste von Eingabefeldern erstellt aus Daten in einer Datenbank, mehr oder weniger wie diese:
foreach ($data as $value) {
...
<input type="text" name="date_earned$row" id="date_earned$row" value = "$date_earned" onchange="changeDate(this)">
...
}
Den onchange-Skript wie folgt aus (Hinweis: das Datum ist nicht ein standard-Datum, so bin ich nicht versuchen, zu validieren, die eine normale Datum). Es wird nicht lassen Sie mich wieder verstärkt auf das element, dass ich nur geändert, wenn ein Fehler aufgetreten ist. Ich habe keine Probleme bei der Einstellung des Fokus zu einem anderen element. Warum?
<script type="text/javascript">
function changeDate(sel) {
var theDate = sel.value;
var isValid = true;
if (theDate) {
<!-- .... some stuff in here to validate the date, sets isValid = false if it is not correct format} -->
}
if (!(isValid)) {
<!-- ... do some stuff in here to display the error message -->
document.getElementById('thiselementsid').focus(); <!-- this doesn't work when 'thiselementsid' is the id of the element which just lost focus-->
document.getElementById('someotherelement').focus(); <!-- this works, but not if 'someotherelement' is the id of the last focused element -->
}
- Versuchen Sie, wickeln Sie Ihre Befehle in ein setTimeout senden Sie den Stapel wie so
setTimeout(function(){document.getElementById('thiselementsid').focus()}, 0);
. Ich denke, dass, wenn sich der Fokus verschiebt sich, es wird das Ereignis ausgelöst, bevor der Fokus ab, so dass Sie den Fokus wieder auf das gleiche element wird nicht funktionieren. - Das funktioniert, vielen Dank
- Cool. Sie sollten akzeptieren, Steven Antwort, denn er machte den gleichen Vorschlag!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Sache, die mir auffällt, ist, dass Sie fehlen ein Hochkomma in der Zeile
nach "thiselementsid." Ich weiß nicht, ob das die Quelle für Ihr problem oder wenn es sich nur um Beispiel-code.
Es ist auch möglich, dass einige der nachfolgenden Codes ist der Aufruf etwas entlang der Linien von
document.getElementById('thiselementsid').blur()
(blur ist die Reihenfolge, um den Fokus verlieren). Evan ' s Vorschlag in einem Kommentar angehängt, um Ihre Frage zu lösen wäre, dass -setTimeout
verzögern würde die Einstellung von Fokus bis nach der blur () - Methode aufgerufen wurde.Gibt es andere Möglichkeiten, die meisten von Ihnen ziemlich böse. Lassen Sie uns wissen, in einem Bearbeiten, wenn Sie immer noch Probleme haben. Es könnte gut sein, in diesem Fall, um mehr von der umliegenden code.
Können Sie es so einstellen, wie gut.