在 jQuery 中将多个函数与相同的代码组合在一起

combine multiple functions with same code in jquery

本文关键字:代码 在一起 组合 函数 jQuery      更新时间:2023-09-26

是的,我已经彻底搜索了谷歌,没有找到任何适合我要求的东西。

到目前为止,我拥有的代码位于以下链接中:

http://jsfiddle.net/ZKwTY/4/

有多个onchange事件调用几乎相同的代码,我想以逗号分隔的方式组合它们,只调用一次。 像这样的东西

   (on1Change, on2Change, on3Change): function () {
       this.loadData();
     }

这可能吗??

注意:这些函数通过我无法控制的框架绑定到控件,我需要创建这些函数,框架会将它们绑定到相应的控件

或者你可以像这样创建你的对象

var ol = {
on1Change: this.loadData,
on2Change: this.loadData,
on3Change: this.loadData,
on4Change: this.loadData,
loadData: function () {
    this.loadData1();
    this.loadData2();
},
loadData1: function () {
    alert('hi from loadData1');
},
loadData2: function () {
    alert('hi from loadData2');
}
};

然后,如果你想做一次,那么声明一个对象

var ol = {
    loadData: function () {
        this.loadData1();
        this.loadData2();
    },
    loadData1: function () {
        alert('hi from loadData1');
    },
    loadData2: function () {
        alert('hi from loadData2');
    }
};// end of object
ol.on1Change = ol.on2Change = ol.on3Change = ol.on4Change = ol.loadData;

在对象声明后动态添加所有属性

use bind()

$("selector").bind(on1Change, on2Change, on3Change): function () {
        this.loadData();
  }.....

你可以尝试这样的 http://jsfiddle.net/s4VVY/即在对象创建后添加方法

[1,2,3,4,5].forEach(function(it){ol["on"+it+"Change"] = function(){this.loadData()}}) 

更新
可能是这个帮助

var ol = (function(){
    var o = {
        loadData: function () {
            this.loadData1();
            this.loadData2();
        },
        loadData1: function () {
            alert('hi from loadData1');
        },
        loadData2: function () {
            alert('hi from loadData2');
        }
    }
    o.on1Change=o.on2Change=o.on3Change=o.on4Change=function(){ this.loadData();};
    return o;
})()

你也可以使函数绑定Func

function bindFunc(){
    var obj = arguments[0],
        handler = arguments[1],
        properties = Array.prototype.slice.call(arguments,2);
    for(var i in properties){
        obj[properties[i]] = handler;
    }
}

并调用为

bindFunc(o,function(){this.loadData();},"on1Change","on2Change","on3Change","on4Change")