ko.bindingHandlers.iFramedatePicker =
{
init: function (element, valueAccessor, allBindingsAccessor, data, context)
{
window.parent.customer.datePickers.initDatePicker(element);
ko.utils.registerEventHandler(element, "change", function () {
var observable = valueAccessor();
var ctrlValue;
if (typeof (observable()) == "string")
ctrlValue = $(element).val();
else
ctrlValue = window.parent.customer.datePickers.getDate(element);
observable(ctrlValue);
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
window.parent.customer.datePickers.destroyDatePicker(element);
});
},
update: function (element, valueAccessor) {
var modelValue = ko.utils.unwrapObservable(valueAccessor());
if ((modelValue) && (modelValue != '')) {
var modelValue_Date = new Date(modelValue);
var controlValue = window.parent.customer.datePickers.getDate(element);
if (controlValue === null || controlValue.getTime() !== modelValue_Date.getTime())
window.parent.customer.datePickers.setDate(element, modelValue_Date);
}
}
};
我正在使用上面的代码,但我的datepicker处理程序位于iframe中。
问题是ko.utils.registerEventHandler
在更改日期选择器上的日期后永远不会触发。
答案 0 :(得分:0)
如果您尝试在拥有子iframe时触发并捕获事件,请尝试使用parent.document
而不是window.parent
,例如this答案。
此外,如果您在parent.document
中使用registerHandler
,则事件的注册可能应该在iframe中进行。
答案 1 :(得分:0)
您是否尝试在update
中而不是init
中添加事件委托?
也可以将JQUERY函数直接用于处理程序中。
$(element).initDatePicker();