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!
InformationsquelleAutor David Dice | 2013-10-27
Schreibe einen Kommentar