Hier sind Web Components sehr nützlich, aber sie werden noch nicht vollständig in allen Browsern unterstützt.
Die Idee ist es, eine einfache HTML-Element, mit zwei Kindern zu schaffen (von und nach) wie folgt zusammen:
<div id="fromToDate">
<div></div>
<div></div>
</div>
dann eine Vorlage erstellen, die definiert, wie die Datumsauswahl aussehen sollte:
<template id="fromToDateTemplate">
<label for="fromDate">from</label>
<input type="date" class="fromDate" select=":first" required="" />
<label for="toDate">to</label>
<input type="date" class="toDate" select=":last" required="" />
</template>
Der Select-Parameter definiert, woher der Wert genommen wird, also nimmt das erste Eingabefeld das erste Div von "#fromToDate".
Zuletzt haben wir den „Schatten root“ bevölkern und die Logik definieren:
var shadow = document.querySelector('#fromToDate').webkitCreateShadowRoot(),
template = document.querySelector('#fromToDateTemplate');
shadow.appendChild(template.content);
shadow.querySelector(".fromDate").addEventListener("change", function (e) {
var to = this.value;
shadow.querySelector(".toDate").setAttribute("min", this.value);
});
template.remove();
am Ende zwei Eingabefelder sind renderd und wenn ein Datum in den ersten picker Auswahl, kann der zweite picker nicht Wählen Sie irgendwelche niedrigeren Daten.
Fiddler Beispiel: http://jsfiddle.net/cMS9A/
Vorteile:
- Bauen als Widget
- Leicht
- reause nicht Seiten brechen
- unabhängig
gestylt werden Nachteil ges:
Zukunft Lesen in allen Browsern unterstützt:
'min' und' max' attrs sind das 'date' Format, nicht Element \ –
@EL: Ich bin mir der Einschränkung bewusst (oder genauer gesagt, die Beschränkung von Werten auf ein ISO Format), das Beispiel war beabsichtigt als Pseudo-Markup dienen, das die gewünschte Beziehung zwischen den Werten zeigt. Ich habe es aktualisiert, um [hoffentlich] die Ambiguität zu entfernen, danke! –
Der einfache Weg, um es zu tun ist, eine Datumsauswahl und eine "Anzahl von Tagen" Kontrolle zu haben. – robertc