4 Stimmen

Schleifenbildung durch Elemente mit jQuery basierend auf dem Attribut name statt id

Danke, dass Sie sich die Zeit genommen haben, dies zu lesen.

Ich habe eine unbekannte Anzahl von (dynamisch eingefügten) Eingabeelementen in einem Formular, an die ich jeweils das in jQuery UI enthaltene Datepicker-Widget anhängen möchte.

Alle Eingabeelemente, denen ich den Datepicker zuordnen möchte, haben die Klasse "date-pick". Offensichtlich, weil wir mehr als ein passendes Element haben, brauchen wir mehr als nur einen Klassennamen, damit der Datumswert in das Ursprungsfeld zurückgegeben wird und nicht nur der erste Treffer.

Normalerweise würde ich wahrscheinlich so etwas machen wie:

$("input.date-pick").each(function(){
    $(this).datepicker({dateFormat: "yy-mm-dd"});
});

In dem Code, mit dem ich arbeite, haben die Eingabeelemente jedoch keine eindeutigen IDs, bis die Formulardaten gespeichert werden (was ich nicht ändern kann), aber sie haben eindeutige Namensattributwerte des Formats name="field_id_x[y][z]" die dann beim Speichern des Formulars in eine ID des Formats id="field_id_xyz" .

Also meine Frage ist, kann jemand mir zeigen, wie man Schleife durch alle Eingabeelemente mit einer Klasse von "Datum-Pick" auf der Grundlage ihrer Name-Attribut-Werte?

(PS: Es ist vielleicht noch erwähnenswert, dass die Anzahl der übereinstimmenden Eingabeelemente im Formular vom Benutzer im laufenden Betrieb erhöht/verringert werden kann).

1 Stimmen

Ich kann Ihre Frage nicht nachvollziehen. Die jQuery, die Sie dort geschrieben haben, ist vollkommen gültig: Sie durchläuft alle Eingabeelemente mit einer Klasse von .date-pick und fügen Sie ein Datepicker-Steuerelement hinzu. Warum müssen die Namen mit einbezogen werden?

0 Stimmen

Votey, siehe meinen Kommentar zur Antwort von T.J. Crowder unten

0 Stimmen

@meta: ...und siehe meine Antwort. :-)

4voto

kaiz.net Punkte 1974

Ihr Code sollte so funktionieren, wie er ist. Sie könnten jedoch eine Schleife nach Namen wie folgt durchlaufen:

$("input[name*='field_id_'].date-pick").each(function(){
   $(this).datepicker({dateFormat: "yy-mm-dd"});
});

3voto

T.J. Crowder Punkte 948310

Für die Datumsauswahl müssen die Elemente keine ID haben. Sie suchen bereits nach den Elementen für sie. Das sollte funktionieren:

$('input.date-pick').datepicker({dateFormat: "yy-mm-dd"});

Beachten Sie, dass Sie nicht einmal die each anrufen.

Vollständiges Beispiel:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>DatePicker Test Page</title>
<script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
<script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
<script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.datepicker.js"></script>
<script type='text/javascript'>
$(function() {
    $('.dp').datepicker();
});
</script>
</head>
<body>
<hr />
<input class='dp' type='text'>
<input class='dp' type='text'>
<input class='dp' type='text'>
</body>
</html>

0voto

user511941 Punkte 121

Haben Sie schon etwas ausprobiert wie

var namefield = "field_id_"
$("date-pick").each(function(index, element) {
  if ($(element).attr("name").substr(0,namefield.length) == namefield) {
    // code to process
  }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X