0

Ich habe eine jQuery UI Datepicker, die Einschränkungen verwendet. Der Datepicker wird initialisiert und mithilfe einer benutzerdefinierten Knockout-Bindung an ein Eingabeelement gebunden. Diese Datumsbeschränkungen werden von Berechnungen verarbeitet, die auf anderen Werten in meiner Form beruhen. Die Sache ist: Durch das Setzen der Datepicker-Einschränkungen wird das DOM (sichtbar) auf einen anderen Wert aktualisiert. Das für dieses Element registrierte Änderungsereignis wird jedoch nicht ausgelöst. Ich bin verzweifelt, dieses Ereignis zu erfassen, damit ich meine Beobachtungsdaten entsprechend aktualisieren kann.Trigger-Ereignis beim Aktualisieren von Datepicker durch Einschränkung

ko.utils.registerEventHandler(element, 'change', function() { 
    console.log('this should fire when clicking the Set restrictions-button'); 
    var observable = valueAccessor(); 
    var value = $(element).datepicker('getDate'); 
    observable(value); 
}); 

habe ich einen Stift nur um das Problem zu veranschaulichen: http://codepen.io/Egidius/pen/XdyazR?editors=1011

Mit einem Klick auf die "Set Einschränkungen" -Button Sie das Datum in dem DOM zu ändern sehen. Das Ereignis wird jedoch nicht durch diese Mutation ausgelöst.

Antwort

1

Der jQuery UI-Datapicker löst keine Änderung aus, nachdem er aufgrund einer neuen Einschränkung seinen Wert geändert hat. Sie können ihn zwingen, so zu tun, indem .trigger("change") oder .change() zu Ihrer setRestrictions Methode hinzu:

this.setRestrictions = function() { 
    var minDate = new Date(); 
    minDate.setDate(minDate.getDate() + 5); 
    $("input[name='date']") 
    .datepicker('option', 'minDate', minDate) 
    .trigger("change"); 
} 

Beachten Sie auch, dass jQuery UI nicht sehr wählerisch ist, wenn onSelect Auslösung: es überprüft nicht, ob der Wert tatsächlich geändert. Es könnte eine nette Funktion sein, dies selbst im Änderungshandler zu überprüfen. Alternativ können Sie auch die vor dem überprüfen, die die Änderung auslöst, aber Sie müssen die Änderungsauslöser, die beim Klicken auf ein bereits ausgewähltes Datum auftreten, immer noch 'reparieren'.

+0

Super !! Vielen Dank user3297291 :). Obwohl es nicht die Lösung war, auf die ich gehofft hatte, macht es den Job! Ich frage mich immer noch, wo die Datumsaktualisierung in meinem DOM stattfindet. – Dani