2010-03-02 17 views
5

Ich muss einen dynamischen Filter erstellen, der Zeilen dynamisch hinzufügt/entfernt.Dynamischer JQuery-Datumsauswahlcode

Es enthält eine Dropdown-Box. Abhängig von dem ausgewählten Dropdown-Box-Wert, erstelle ich eine dynamische <TD>, die ein Textfeld oder eine Dropdown-Liste haben kann.

Wenn es ein Textfeld ist, dann muss ich Datumsauswahl für dieses Textfeld hinzufügen.

Ich habe dies getan, außer Datumsauswahl für dynamisch generierte Textfeld.
Wenn Sie 100 Zeilen erstellen, sollten die Namen der Textfelder für alle Zeilen identisch sein.

Wie füge ich datepicker für dynamisch generierte Textfelder hinzu?

Antwort

1

Tirst ein Klasse-Attribut als "Datum", um Ihre Eingabe oder div hinzuzufügen.

Nach dynamisch fügen Sie eine Texteingabe hinzu, um $('.date').datePicker() wieder zu binden, um datePicker an neue Eingänge oder div zu binden.

+0

Hallo Luca, danke für Ihre Antwort. Mein Code ist, $ ('td: eq (2)', newRow) „.html ('"); $ ('. Datum'). DatePicker(); \t Aber es zeigt nichts plz mir helfen, was ich tun muss. Gib mir deine wertvolle Hilfe plz. – Shanmugam

+0

verwenden Sie jquery ui, ist es richtig? wenn ja zuerst richtig datePicker zu datepicker ... ich habe datePicker vorher geschrieben, als ich im laufe der zeit geschrieben habe ... daneben sieht dein code richtig aus ... auch sicher, dass er aufgerufen wird (ein alert()?) –

16

Ich hatte das gleiche Problem. Sie müssten den DatePicker an die dynamisch hinzugefügte Zeile binden. Die Datumsauswahl weist der dynamischen Zeile eine hadDatePicker-Klasse zu.

Sie müssten also entfernen und neu binden.

Etwas Ähnliches -

jQuery('.date-pick').removeClass('hasDatepicker').datepicker({ 
    dateFormat: 'mm-dd-yy' 
    }); 

Grüße, Tina Agrawal

+0

das hat funktioniert perfekt für mich. Danke Tina. –

+4

'removeClass ('hasDatepicker')' war der Schlüssel! :) DANKE – Ajax

+1

Dies ist die einzige Lösung, die für mich funktioniert hat. Vielen Dank! –

3

Eigentlich habe ich die Lösung von @Tina Agrawal Aber da nun vorgesehen, verwenden, wenn ich ein Datum aus dem Kalender wählen, i klicken erneut und erneut auswählen. Wenn ich auf nächsten Monat klicke, wird es zu 1900-01-01 gehen.

Nun, es war so seltsam ...

Nach zwei Stunden von Versuch und Fehler und Forschung.

ich einfach tat

$('.date-pick').live('click', function(){ 
$('.date-pick').datepicker(); 
}); 

Nun, es funktioniert.

+1

Funktioniert nicht richtig für mich - Ich sehe die Datumsauswahl erst, nachdem ich geklickt habe das Feld, also muss ich zweimal klicken, um das Datepicker-Popup zu erhalten. –

+0

Sie könnten versuchen, zuerst auf document.ready $ ('. Date-pick'). Datepicker(); – workdreamer

+0

Sie erkennen, diese Frage war über Felder dynamisch zum DOM hinzugefügt, nach einem AJAX-Aufruf oder dergleichen, oder? Wie wird ein Dokument dazu beitragen? –

1

Ich hatte ein ähnliches Problem darin, dass beim dynamischen Hinzufügen neuer Zeilen zu meiner Tabelle die Datumsauswahlfelder in den neuen Zeilen (jede Zeile, die dem DOM dynamisch hinzugefügt wurde) alle meine ursprünglichen Datumsauswahlfelder aktualisiert haben.

Das Entfernen der hasDatepicker-Klasse, wie oben vorgeschlagen, reichte nicht aus, um mein Problem zu lösen, wahrscheinlich weil ich .clone() verwendete, um meine dynamisch hinzugefügten Zeilen zu erstellen.

Die Lösung, wenn das Klonen Reihe waren die geklonten Eingabefelder, erstellen Sie sie, fügen Sie sie in meine neu geklonten Tabellenzeile und dann neu initiieren die Date Picker

Zum Beispiel zu entfernen:

//Remove exisiting cloned input fields 
new_row.find("td.date input").remove(); 

//Create new input fields and append to table td 
var date_tds = new_row.find("td.date"); 
$('<input />', {"name":"gStartDates["+n_array_pos+"]","type":"text"}).appendTo(date_tds[0]); 
$('<input />', {"name":"gEndDates["+n_array_pos+"]","type":"text"}).appendTo(date_tds[1]); 

//Re-initiate datepicker on the input fields      
new_row.find("td.date input").datepicker({ 
    dateFormat:"dd-mm-yy", 
    minDate:StartDate, 
    maxDate:EndDate 
}); 
2

ich hatte das gleiche Problem und löste es auf eine andere Weise. Obwohl ich mir nicht ganz sicher bin, warum es funktioniert, da ich sehr neu in jQuery bin. Ich schrieb folgendes und es iteriert den gesamten Satz von Steuerelementen mit der Klasse "class_date" und bindet das datepicker-Steuerelement an es zurück.

$(".class_date").removeClass('hasDatepicker').datepicker();