Ich habe dynamisch Textfelder erstellt und möchte, dass jedes von ihnen beim Klicken einen Kalender anzeigen kann. Der Code, den ich benutze, ist:
$(".datepicker_recurring_start" ).datepicker();
Dies funktioniert nur für das erste Textfeld, obwohl alle meine Textfelder eine Klasse namens datepicker_recurring_start haben.
Deine Hilfe ist sehr Willkommen!
javascript
jquery
jquery-ui
datepicker
durchtränkt
quelle
quelle
Antworten:
Hier ist der Trick:
DEMO
Die
$('...selector..').on('..event..', '...another-selector...', ...callback...);
Syntax bedeutet:Fügen Sie einen Listener
...selector..
(body
in unserem Beispiel) für das Ereignis hinzu..event..
(in unserem Beispiel 'focus'). Wenden Sie für alle Nachkommen der übereinstimmenden Knoten, die mit dem Selektor übereinstimmen...another-selector...
(.datepicker_recurring_start
in unserem Beispiel), den Ereignishandler an...callback...
(die Inline-Funktion in unserem Beispiel).Siehe http://api.jquery.com/on/ und insbesondere den Abschnitt über "delegierte Ereignisse".
quelle
.datapicker()
jedes Mal anrufen möchten, wenn das Textfeld den Fokus erhält, sollten Sie bei diesem Ansatz vorsichtig sein (vorausgesetzt, ich lese das richtig). Ich denke jedoch, dass Sie damit.datapicker()
einverstanden sind, da wahrscheinlich geprüft wird, ob ein Datepicker erstellt wurde, bevor versucht wird, ihn neu zu erstellen. Mit anderem Code haben Sie diese Gnade möglicherweise nicht. Auch .on (wird nur in JQuery 1.7 eingeführt - stellen Sie also sicher, dass Sie die richtige Version verwenden.:not(.hasDatepicker)
Für mich unten hat jquery funktioniert:
"Körper" in Dokument ändern
Danke an Skafandri
Hinweis: Stellen Sie sicher, dass Ihre ID für jedes Feld unterschiedlich ist
quelle
Hervorragende Antwort von skafandri +1
Dies wird nur aktualisiert, um nach der hasDatepicker-Klasse zu suchen.
quelle
$('body').on('focus',".datepicker:not(.hasDatepicker)", function(){$(this).datepicker();});
?Stellen Sie sicher, dass Ihr Element mit der
.date-picker
Klasse KEINEhasDatepicker
Klasse hat. Wenn dies der Fall ist, schlägt sogar ein Versuch$myDatepicker.datepicker();
fehl, mit neu zu initialisieren ! Stattdessen müssen Sie tun ...quelle
Sie müssen das
.datepicker();
erneut ausführen , nachdem Sie die anderen Textfeldelemente dynamisch erstellt haben.Ich würde dies in der Rückrufmethode des Aufrufs empfehlen, der die Elemente zum DOM hinzufügt.
Angenommen, Sie verwenden die JQuery Load-Methode, um die Elemente aus einer Quelle abzurufen und in das DOM zu laden. Gehen Sie dazu wie folgt vor:
quelle
Die neue Methode für dynamische Elemente ist MutationsObserver . Im folgenden Beispiel wird die Funktion (_.each) mit underscore.js verwendet.
quelle
Dies war, was für mich funktioniert hat (mit jquery datepicker):
quelle
Keine der anderen Lösungen hat bei mir funktioniert. In meiner App füge ich die Datumsbereichselemente mithilfe von jquery zum Dokument hinzu und wende dann Datepicker auf sie an. Daher funktionierte keine der Event-Lösungen aus irgendeinem Grund.
Das hat endlich geklappt:
Hoffe das hilft jemandem, denn das hat mich ein bisschen zurückgeworfen.
quelle
Sie können die Klasse .datepicker in einer Javascript-Funktion hinzufügen, um den Eingabetyp dynamisch ändern zu können
quelle
Ich habe die @ skafandri-Antwort geändert, um zu vermeiden, dass der
datepicker
Konstruktor erneut auf alle Eingaben mit.datepicker_recurring_start
Klasse angewendet wird .Hier ist der HTML:
Hier ist der JS:
hier ist eine Arbeits Demo
quelle
Dies hat bei JQuery 1.3 für mich funktioniert und wird beim ersten Klicken / Fokussieren angezeigt
Dies setzt voraus, dass Ihre Eingabe die Klasse 'mostrar_calendario' hat.
Live ist für JQuery 1.3+ für neuere Versionen, die Sie an "on" anpassen müssen.
Weitere Informationen zum Unterschied finden Sie hier http://api.jquery.com/live/
quelle
quelle