Ich habe ein jQuery-Datumsauswahl-Steuerelement, das für eine Instanz einwandfrei funktioniert, bin mir jedoch nicht sicher, wie ich es für mehrere Instanzen zum Laufen bringen kann.
<script type="text/javascript">
$(function() {
$('#my_date').datepicker();
});
</script>
<% Using Html.BeginForm()%>
<% For Each item In Model.MyRecords%>
<%=Html.TextBox("my_date")%> <br/>
<% Next%>
<% End Using%>
Ohne die For Each-Schleife funktioniert es einwandfrei. Wenn jedoch mehr als ein Element in der "MyRecords" -Sammlung vorhanden ist, erhält nur das erste Textfeld eine Datumsauswahl (was sinnvoll ist, da es an die ID gebunden ist). Ich habe versucht, dem Textfeld eine Klasse zuzuweisen und Folgendes anzugeben:
$('.my_class').datepicker();
Während dies überall eine Datumsauswahl anzeigt, aktualisieren sie alle das erste Textfeld.
Was ist der richtige Weg, um diese Arbeit zu machen?
javascript
jquery
jquery-ui
gfrizzle
quelle
quelle
disabled
sind. Der Datepicker wird für Eingabefelder mit demdisabled
AttributAntworten:
html:
<input type="text" class="datepick" id="date_1" /> <input type="text" class="datepick" id="date_2" /> <input type="text" class="datepick" id="date_3" />
Skript:
$('.datepick').each(function(){ $(this).datepicker(); });
(Pseudo-Codierung etwas, um es einfacher zu halten)
quelle
$(".datepick").datepicker();
funktionieren, wenn Sie unterschiedliche IDs in den Eingabefeldern haben?onSelect
Ereignishandlers an einige HTML-Textfelder angehängt. Ich muss den Namen der Selektorklasse kennen, auf dem der aktuelle VorgangonSelect
stattgefunden hat. Auf die Elemente werden zwei andere Klassen angewendet als die, die ich zum Anhängen des Datepickers verwendeIch hatte gerade das gleiche Problem.
Die korrekte Verwendung der
$('.my_class').datepicker();
Datumsauswahl ist , Sie müssen jedoch sicherstellen, dass Sie nicht mehreren Datumsauswahlern dieselbe ID zuweisen.quelle
Die offensichtliche Antwort wäre, verschiedene IDs zu generieren, eine separate ID für jedes Textfeld, so etwas wie
[int i=0] <% Using Html.BeginForm()%> <% For Each item In Model.MyRecords%> [i++] <%=Html.TextBox("my_date[i]")%> <br/> <% Next%> <% End Using%>
Ich kenne ASP.net nicht, deshalb habe ich nur einen allgemeinen C-ähnlichen Syntaxcode in eckigen Klammern hinzugefügt. Die Übersetzung in tatsächlichen ASP.net-Code sollte kein Problem sein.
Dann müssen Sie einen Weg finden, um so viele zu generieren
$('#my_date[i]').datepicker();
als Artikel in Ihrem
Model.MyRecords
. Wiederum befindet sich in eckigen Klammern Ihr Zähler, sodass Ihre jQuery-Funktion ungefähr so aussehen würde:<script type="text/javascript"> $(function() { $('#my_date1').datepicker(); $('#my_date2').datepicker(); $('#my_date3').datepicker(); ... }); </script>
quelle
<html> <head> <!-- jQuery JS Includes --> <script type="text/javascript" src="jquery/jquery-1.3.2.js"></script> <script type="text/javascript" src="jquery/ui/ui.core.js"></script> <script type="text/javascript" src="jquery/ui/ui.datepicker.js"></script> <!-- jQuery CSS Includes --> <link type="text/css" href="jquery/themes/base/ui.core.css" rel="stylesheet" /> <link type="text/css" href="jquery/themes/base/ui.datepicker.css" rel="stylesheet" /> <link type="text/css" href="jquery/themes/base/ui.theme.css" rel="stylesheet" /> <!-- Setup Datepicker --> <script type="text/javascript"><!-- $(function() { $('input').filter('.datepicker').datepicker({ changeMonth: true, changeYear: true, showOn: 'button', buttonImage: 'jquery/images/calendar.gif', buttonImageOnly: true }); }); --></script> </head> <body> <!-- Each input field needs a unique id, but all need to be datepicker --> <p>Date 1: <input id="one" class="datepicker" type="text" readonly="true"></p> <p>Date 2: <input id="two" class="datepicker" type="text" readonly="true"></p> <p>Date 3: <input id="three" class="datepicker" type="text" readonly="true"></p> </body> </html>
quelle
Es gibt eine einfache Lösung.
<html> <head> <script src="http://code.jquery.com/jquery-1.9.1.js"></script> <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"> </script> <script type="text/javascript" src="../js/jquery.min.js"></script> <script type="text/javascript" src="../js/flexcroll.js"></script> <script type="text/javascript" src="../js/jquery-ui-1.8.18.custom.min.js"></script> <script type="text/javascript" src="../js/JScript.js"></script> <title>calendar</title> <script type="text/javascript"> $(function(){$('.dateTxt').datepicker(); }); </script> </head> <body> <p>Date 1: <input id="one" class="dateTxt" type="text" ></p> <p>Date 2: <input id="two" class="dateTxt" type="text" ></p> <p>Date 3: <input id="three" class="dateTxt" type="text" ></p> </body> </html>
quelle
Wenn Sie Datepicker zur Laufzeit hinzufügen, müssen Sie überprüfen, ob er bereits Datepicker enthält. Entfernen Sie dann zuerst die Klasse hasDatepicker und wenden Sie datePicker darauf an.
function convertTxtToDate() { $('.dateTxt').each(function () { if ($(this).hasClass('hasDatepicker')) { $(this).removeClass('hasDatepicker'); } $(this).datepicker(); }); }
quelle
Eine kleine Notiz zur SeanJA-Antwort.
Interessanterweise, wenn Sie KnockoutJS und jQuery zusammen verwenden, sind die folgenden Eingaben mit unterschiedlichen IDs , aber mit derselben beobachtbaren Datenbindung :
<data-bind="value: first_dt" id="date_1" class="datepick" /> <data-bind="value: first_dt" id="date_2" class="datepick" />
bindet einen (gleichen) Datepicker an beide Eingänge (obwohl sie unterschiedliche IDs oder Namen haben).
Verwenden Sie separate Observables in Ihrem ViewModel , um einen separaten Datepicker an jede Eingabe zu binden:
<data-bind="value: first_dt" id="date_1" class="datepick" /> <data-bind="value: second_dt" id="date_2" class="datepick" />
Initialisierung:
$('.datepick').each(function(){ $(this).datepicker(); });
quelle
Die Lösung besteht darin, unterschiedliche IDs zu haben, wie viele von Ihnen angegeben haben. Das Problem liegt noch tiefer im Datepicker. Bitte korrigieren Sie mich, aber der Datepicker hat keine Wrapper-ID - "ui-datepicker-div". Dies ist unter http://jqueryui.com/demos/datepicker/#option-showOptions im Thema zu sehen .
Gibt es eine Option, mit der diese ID in eine Klasse geändert werden kann? Ich möchte dieses Skript nicht nur für diese eine offensichtliche Lösung abspalten müssen !!
quelle
So ändern Sie die Verwendung der Klasse anstelle der ID
<script type="text/javascript"> $(function() { $('.my_date1').datepicker(); $('.my_date2').datepicker(); $('.my_date3').datepicker(); ... }); </script>
quelle
Ich hatte das gleiche Problem, stellte jedoch schließlich fest, dass es ein Problem mit der Art und Weise war, wie ich das Skript von einem ASP-Webbenutzersteuerelement aus aufrief. Ich habe verwendet
ClientScript.RegisterStartupScript()
, aber vergessen, dem Skript einen eindeutigen Schlüssel zu geben (das zweite Argument). Da beiden Skripten derselbe Schlüssel zugewiesen wurde, wurde nur das erste Feld tatsächlich in einen Datepicker konvertiert. Deshalb habe ich beschlossen, die ID des Textfelds an den Schlüssel anzuhängen, um ihn eindeutig zu machen:Page.ClientScript.RegisterStartupScript(this.GetType(), "DPSetup" + DPTextbox.ClientID, dpScript);
quelle
Ich hatte ein ähnliches Problem beim dynamischen Hinzufügen von Datepicker-Klassen. Die Lösung, die ich gefunden habe, bestand darin, Zeile 46 von datepicker.js zu kommentieren
// this.element.on('click', $.proxy(this.show, this));
quelle
In meinem Fall hatte ich meinen
<input>
Elementen keine ID gegeben und verwendete eine Klasse, um den Datepicker wie in SeanJAs Antwort anzuwenden, aber der Datepicker wurde nur auf den ersten angewendet. Ich stellte fest, dass JQuery automatisch eine ID hinzufügte und diese in allen Elementen dieselbe war, was erklärte, warum nur die erste Datumsauswahl getroffen wurde.quelle