jQuery UI datepicker: onSelect zweimal genannt
Bemerkte ich ein seltsames Verhalten mit dem jQuery datepicker onSelect-Methode können Sie einen Blick auf diese Geige, um es zu testen.
Getestet mit jQuery 1.7.2 und jQuery-UI-1.8.18, passiert in Firefox, IE und Chrome.
Szenario:
- legen den Fokus auf das text-Feld (die Datumsauswahl angezeigt werden soll)
- drücken Sie die EINGABETASTE, um wählen Sie die Standard-Datum (wie das datepicker-API sagt, dass es getan werden kann)
- beachten Sie, dass onSelect wird zweimal genannt.
Alles funktioniert gut, wenn Sie ein Datum auswählen, mit der Maus.
Ist das ein bug? Wenn nicht, wie kann ich vermeiden, dass dieses Verhalten? Vielen Dank für Ihre Hilfe.
- Ich bin auf mac osx safari
Version 5.1.6
nur eine wählen ? hmmm - scheint gut zu funktionieren
- Ja, es ist passiert in meinem firefox 11.0. Nicht sicher, warum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einen Lösung Vorschlag, der ist so hässlich, ich bin halb beschämt, um es zu veröffentlichen. Allerdings verzweifelten Zeiten erfordern verzweifelte Maßnahmen.
Probieren Sie etwas wie dieses. Ich hatte ein paar Minuten, um es zu testen und es scheint zu funktionieren. Verbessern auf die Idee, wenn nicht.
Werde ich erklären, wenn Sie nicht verstehen, die schreckliche, hässliche Gedanke, der hinter dem hack.
Cheers.
setTimeout(function() { trigger = true; }, 1000);
, die ist noch hässlicher. Wenn ich das nicht getan hätte, war die Methode noch zweimal gezündet.Ja du hast Recht, auch ich habe diesen Fehler einige Zeit zurück, aber nur vernachlässigt, es.
Aber dieses mal schaute ich in das datepicker-script gefunden, wo ich, wie es vielleicht sein Fehler. Dies ist reproduzierbar in bestimmter Art und Weise nur, wie Sie erwähnt haben
Haben Sie callback-Funktion 'onSelect' zweimal angerufen.
Dies ist, weil in datepicker javascript '_selectDate" - Funktion wird verwendet, um das ausgewählte Datum wird von key-event-handler-Funktion(_doKeyDown()->_selectDay()->_selectDate()) und beide Funktionen
ruft das call-back-Funktion, die scheint, sein Fehler.
Updates -
Habe ich geändert, die Funktion in _doKeyDown jquery.ui.datepicker.js Datei. Habe ich geändert, der code beim Ereignis enter(keycode-13). So, jetzt callback-Funktion 'onSelect' wird aufgerufen, sobald im oben genannten Szenario.
Hier ist der code für version 1.8.21
Ich hoffe, das würde dein problem lösen.
Update 2
Gibt es eine andere Lösung als beantwortet user1042031 aber nicht die vollständige Lösung. Hier finden Sie, was Sie tun müssen,
Entfernen müssen alert die Ursachen, setzen Sie den Fokus auf Eingabefeld zeigen datepicker wieder. Dieser Aufruf onSelect einmal für sicher versteckt das datepicker-nach drücken der enter-Taste.
DEMO
Kopiere ich den Teil der Lösung zu haben, nur um Sie arbeiten beide Möglichkeiten 🙂
Verwenden
wie diese:
EDIT : so entfernen Sie den Kalender nach Auswahl von Datum
eine Arbeit um Sie verwenden müssen, removeclass:
Die beste Lösung bisher:
});
inst.preventDefault()
ist der wichtigste Teil: es verhindert, dass der Doppel-Entlassung vononSelect()
. Durch die Benutzung der datepicker nicht mehr zu verstecken, sobald Sie das Datum ausgewählt ist, so haben Sie zu nennen$.datepicker._hideDatepicker()
es zu tun.Dank user1042031 und Sunil Chavan.
Scheint mir ein bug... ich habe diese gebunden, die in alle möglichen asynchronen Aufrufe und es vermasselt alles... beste Lösung die ich fand ist dies: