Ich habe eine Knockout-Seite, wo ich die Eingabe mit Regex formatiere. Es macht das Eingabefeld zu einem MM/TT/JJJJ-Format. Wenn also ein Benutzer "1111" eingibt, wird der Eingang vbox so geändert, dass "01/01/2011" angezeigt wird, oder "01111" zeigt "01.01.2011" an.Knockout sendet keinen aktualisierten Wert
Das Problem, mit dem ich konfrontiert bin, ist, dass meine beobachtbare nur den vom Benutzer eingegebenen Tastendruck zurückgibt und nicht das vollständig formatierte Element. Zum Beispiel ist die Eingabe, wenn der Benutzer „1111“ ich zurück „1111“ anstelle der „01.01.2011“
Hier ist das HTML-Segment
<input id="inpEventDt" placeholder="MM/DD/YYYY" class="input-small" data-date-blur="true" data-regex="^((\d{0,2})|(\d{1,2}/?\d{0,2})|(\d{1,2}/?\d{1,2}/?\d{0,4}))$"
type="text" data-bind="textInput: dateofevent"/>
Und das ist, wie ich den Knockout habe Bindung
var ViewModel = function (eventdt) {
var self = this;
self.dateofevent = ko.observable(eventdt);
}
viewModel = new ViewModel("");
ko.applyBindings(viewModel);
Ich versuche herauszufinden, was ich falsch mache.
Ihre Texteingabe ist an die Variable 'dateofevent' gebunden. Wenn Sie also den Eingabewert mit einem anderen Wert als Knockout ändern, müssen Sie die Knockout-Variable ebenfalls mit einem neuen Wert aktualisieren. Ich schlage vor, knockout extend oder subscribe zu verwenden und dann Ihre Regex-Validierung innerhalb der Subscribe-Funktion durchzuführen. –
Haben Sie ein Beispiel? – Mhoque
Hier https://jsfiddle.net/kyr6w2x3/68/ nur ein Beispiel, um zu verhindern, dass Benutzer irgendwelche Sonderzeichen eingeben. Sie müssen Ihre Validierung innerhalb der Validierungsfunktion durchführen und sie dann erneut in das Ziel einfügen. –