Jquery 有没有办法将datepicker函数用作事件
我有一个包含多个模块的应用程序,需要与单个datepicker实例集成。例如,当调用onChangeMonthYear时,我想触发:Jquery 有没有办法将datepicker函数用作事件,jquery,datepicker,Jquery,Datepicker,我有一个包含多个模块的应用程序,需要与单个datepicker实例集成。例如,当调用onChangeMonthYear时,我想触发: moduleA.onChangeMonthYear moduleB.onChangeMonthYear moduleC.onChangeMonthYear 似乎[x]函数上的日期选择器并不是为实现这一点而设计的,但可能我遗漏了一些东西。换句话说,我想使用on[x]函数作为事件 有人找到了这种情况的解决方案吗?如果是,你能提供一些链接或例子吗 如果答案是否定的
moduleA.onChangeMonthYear
moduleB.onChangeMonthYear
moduleC.onChangeMonthYear
似乎[x]函数上的日期选择器并不是为实现这一点而设计的,但可能我遗漏了一些东西。换句话说,我想使用on[x]函数作为事件
有人找到了这种情况的解决方案吗?如果是,你能提供一些链接或例子吗
如果答案是否定的。。。我正在试验一种叫做DatepickerCallstack的东西,它注册匿名回调,并从datepicker on[x]设置执行。它运行了几个迭代,然后奇怪的事情发生了。这看起来像是一个内部参考问题。到目前为止,它只发生在beforeShowDay。我可以通过控制台调试/检查看出传入回调的参数是正确的,但jQuery不同意:Uncaught TypeError:无法读取未定义的属性“0”
function DatepickerCallStack() {
this.callstack = {
onChangeMonthYear: {},
beforeShow: {},
beforeShowDay: {},
onSelect: {},
onClose: {}
};
}
DatepickerCallStack.prototype = {
constructor: DatepickerCallStack,
register: function(event, callback, reference) {
if (typeof event !== 'string' || event === '') {
throw Error("Invalid event argument.");
} else if (!this.callstack.hasOwnProperty(event)) {
throw Error("Unsupported event: " + event);
}
if (typeof callback !== 'function') {
throw Error("Invalid callback argument.");
}
if (reference) {
if (reference !== 'string' || reference === '') {
throw Error("Invalid reference argument.");
}
} else {
reference = 'callback' + Object.size(this.callstack[event]).toString();
}
this.callstack[event][reference] = callback;
},
unregister: function(event, reference) {
if (typeof event !== 'string' || event === '') {
throw Error("Invalid event argument.");
} else if (!this.callstack.hasOwnProperty(event)) {
throw Error("Unsupported event: " + event);
}
if (reference !== 'string' || reference === '') {
throw Error("Invalid reference argument.");
} else if (!this.callstack[event].hasOwnProperty(reference)) {
throw Error("Reference does not exists: " + reference);
}
delete this.callstack[event][reference];
},
execute: function(event, args) {
if (Object.size(this.callstack[event]) === 0) {
switch(event) {
case 'beforeShowDay':
return [true, ''];
case 'beforeShow':
return {};
case 'onChangeMonthYear':
case 'onSelect':
case 'onClose':
return;
}
}
var self = this,
result;
Object.keys(this.callstack[event]).forEach(function(reference) {
var callback = self.callstack[event][reference];
switch(event) {
case 'beforeShowDay':
result = callback(args.date);
return (typeof result === 'object') ? result : [true, ''];
case 'beforeShow':
result = callback(args.input, args.inst);
return (typeof result === 'object') ? result : {};
case 'onChangeMonthYear':
callback(args.year, args.month, args.inst);
break;
case 'onSelect':
callback(args.dateText, args.inst);
break;
case 'onClose':
callback(args.dateText, args.inst);
break;
}
});
}
};
这就是它的初始化方式
window.DPCS = new DatepickerCallStack;
var dp_settings = {
beforeShow: function(input, inst) {
return window.DPCS.execute('beforeShow', {input:input, inst:inst});
},
beforeShowDay: function(date) {
return window.DPCS.execute('beforeShowDay', {date:date});
},
onChangeMonthYear: function(year, month, inst) {
window.DPCS.execute('onChangeMonthYear', {year:year, month:month, inst:inst});
},
onSelect: function(dateText, inst) {
window.DPCS.execute('onSelect', {dateText:dateText, inst:inst});
},
onClose: function(dateText, inst) {
window.DPCS.execute('onClose', {dateText:dateText, inst:inst});
},
dateFormat:'mm-dd-yy'
};
window.DPCS.register('onChangeMonthYear', customOnChangeMonthYear);
window.DPCS.register('beforeShowDay', customBeforeShowDay);
谢谢。这可能会对你有所帮助。您需要使用以下命令将
事件设置为在不同场景中动态调用
$('#datepicker').datepicker( 'option' , 'onChangeMonthYear', function (date) {
//code goes here
});
例如:
$(“#日期选择器”).datepicker();
函数A(){console.log(“A”);}
函数B(){console.log(“B”);}
document.querySelector(“#a”).addEventListener(“单击”,函数(){
$('#datepicker')。datepicker('option','onChangeMonthYear',函数(日期){
A();
});
});
document.querySelector(“#b”).addEventListener(“单击”,函数(){
$('#datepicker')。datepicker('option','onChangeMonthYear',函数(日期){
B();
});
});
document.querySelector(“#c”).addEventListener(“单击”,函数(){
$('#datepicker')。datepicker('option','onChangeMonthYear',函数(日期){
A();
B();
});
});代码>
设置场景A:调用函数A
设置场景B:调用函数B
设置场景C:调用函数A和B
为什么不能添加需要在on[x]处理程序中调用的事件?Vignesh,你能详细说明一下吗?我需要能够动态添加额外的回调,因为某些场景并不适用于所有模块/子工作流。例如,场景1:onChangeMonthYear可能会调用moduleA.onChangeMonthYear和moduleC.onChangeMonthYear场景2:onChangeMonthYear可能只调用moduleB.onChangeMonthYear您的意思是当在jQuery datepicker中触发某个事件时,您需要调用与模块相关的特定事件?