如何在jQuery中添加回调函数?

时间:2012-02-29 14:23:38

标签: jquery

function $(id) {
    if (id) {
        if (window === this) {
            return new $(id);
        }

        this.e = document.getElementById(id);
        return this;
    } else {
        return about;
    }
}

$.prototype = {
    click: function () {
        this.e.onclick = function () {
            alert("hi..");
        }
    }
};

执行此代码时:

$("skg").click2();

它返回警报消息。

但我想添加一个像这样的回调函数:

$("skg").click(function(){
    alert("hi SKG");
});

怎么做?

4 个答案:

答案 0 :(得分:1)

示例1

$.prototype = {
    click: function (callback) {
        this.e.onclick = callback
    }
};

但是如果要解析DOM元素,可以执行以下操作:

示例2

$.prototype = {
    click: function (callback) {
        this.e.onclick = function() {
           callback.call(this); 
        }
    }
};

编辑:

哈哈......其实几乎没有区别。

但是如果你想为你的回调解析一些自定义参数,你可以在最后一个例子中这样做:


您的电话:

var handler = function(arg1, arg2, arg3, ...) {
    alert("Some alert");
};
$("someID").click(handler); 

示例1:

handler将DOM元素设为this,所以:

this = [HTML DOMElement]

handler中的第一个参数(称为arg1(也可以像第一个arguments一样将变量arguments[0]抛出数组))包含click的事件属性。

arguments[0] = [Event Object]


示例2:

this = [HTML DOMElement]

多数民众赞成。但是你有能力解析hander

的额外参数

如果您的代码是这样的:

$.prototype = {
    click: function (callback) {
        this.e.onclick = function(event) {
           callback.call(this, event, {custom: "argument"} ); 
        }
    }
};

处理程序将获得:

arguments[0] = [Event Object] //与示例1相同

但现在看:

arguments[1] = [Object object]

或更准确:

arguments[1] = {custom: "argument"}

和以前一样,你可以访问它arg2但是像arguments[1]这样的数组。


当我说数组时,我的意思是:

它有一些与数组相同的能力:

长度属性:.lengtharguments.length)。

0指数命名:[n]arguments[0]arguments[1],...)

但是没有一个原生数组方法,如sortpushpopsplice

更多但是:)(只是一个网站注释)

您可以使用本机数组方法使用类似数组的对象:

让我们说这些论点是这样的:处理程序("a", "b", "c", "d")

你只需要第二个参数和更高的参数:

var args = [].splice.call(arguments, 0, 1)

现在args是一个包含["b", "c", "d"]的原生数组。

答案 1 :(得分:1)

通过call / apply等查看函数调用

function click( object, func ){

    // arguments[0] == object
    // arguments[1] == func

    var args = []; // empty array
    // copy all other arguments we want to "pass through" 
    for(var i = 2; i < arguments.length; i++){
        args.push(arguments[i]);
    }

    func.apply(object, args);
}

答案 2 :(得分:0)

更改单击函数以获取方法参数并将onclick事件设置为该方法:

click : function (callback){
           this.e.onclick = callback
}

答案 3 :(得分:0)

click功能中添加参数。

click: function (f) {
           this.e.onclick = f;
       }