Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 有没有办法将datepicker函数用作事件_Jquery_Datepicker - Fatal编程技术网

Jquery 有没有办法将datepicker函数用作事件

Jquery 有没有办法将datepicker函数用作事件,jquery,datepicker,Jquery,Datepicker,我有一个包含多个模块的应用程序,需要与单个datepicker实例集成。例如,当调用onChangeMonthYear时,我想触发: moduleA.onChangeMonthYear moduleB.onChangeMonthYear moduleC.onChangeMonthYear 似乎[x]函数上的日期选择器并不是为实现这一点而设计的,但可能我遗漏了一些东西。换句话说,我想使用on[x]函数作为事件 有人找到了这种情况的解决方案吗?如果是,你能提供一些链接或例子吗 如果答案是否定的

我有一个包含多个模块的应用程序,需要与单个datepicker实例集成。例如,当调用onChangeMonthYear时,我想触发:

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中触发某个事件时,您需要调用与模块相关的特定事件?