jQuery事件。将信息发送到他被召唤的事件

时间:2010-01-27 17:24:20

标签: javascript jquery events

将消息发送到click事件以查找它被调用的位置的最佳方法是什么?。

$("#mybutton").click(function(ev){

   if (called from funcion One or Two){
     //my code
   }

});

funOne = function(){
  $("#mybutton").click();   
};

funTwo = function(){
  $("#mybutton").click();   
};

修改

on "trigger"我有一个小解决方案,但取决于所有实现参数“data”

编辑(II):

我的解决方案基于'@Roatin Marth'答案。

jQuery.fn.trigger = function(event, data) {

    var type = event.type || event,
        expando = "jQuery" + (+new Date);

    event = typeof event === "object" ?
    // jQuery.Event object
        event[expando] ? event :
    // Object literal
        jQuery.extend(jQuery.Event(type), event) :
    // Just the event type (string)
        jQuery.Event(type);

    if (!event.caller) {
        var xcaller = "";
        try {
            xcaller = arguments.callee.caller;
        } catch (ex) { };
        event.caller = xcaller;
    }

    return this.each(function() {
        jQuery.event.trigger(event, data, this);
    });
};


jQuery.fn.click = function(fn) {

    var returned = null;

    if (fn) {
        returned = this.bind('click', fn)
    } else {
        var event = jQuery.Event('click'), xcaller = "";
        try {
            xcaller = arguments.callee.caller;
        } catch (ex) { };
        event.caller = xcaller;
        returned = this.trigger(event);
    }

    return returned;
};

3 个答案:

答案 0 :(得分:4)

您可以在触发人工事件时传递数据,问题是您无法使用click()等快捷功能,而是直接使用 trigger

$("#mybutton").tigger('click', ['One', 'Two']);

点击处理程序:

$("#mybutton").click(function(ev, customArg1, customArg2) {
  customArg1; // "One"
  customArg2; // "Two"
})

看看.click()如何只是.trigger('click')的快捷方式,你不会因为这样做而失去任何东西,只是更多的关键点;)


编辑地址评论

  

系统已经编写完成了   大到足以改变一切   脚本

在这种情况下,您可能需要破解jQuery以捕获arguments.callee.caller并将其传递给您的处理程序:

jQuery.fn.click = function(fn) {
  return fn ? this.bind(name, fn) : this.trigger(name, [arguments.callee.caller]);
};

使用该补丁,直接调用.click()的代码现在将其调用函数作用域信息传递给您的单击处理程序,现在可以执行此操作:

$("#mybutton").click(function(ev, caller) {
   if (caller === funOne || caller === funTwo){
     //my code
   }
});

如果this says为真,那么arguments.callee.caller将来不会可靠,但是,出于某种原因,黑客被称为黑客;)

答案 1 :(得分:0)

我相信,当你根据你的片段进行点击时,它总会触发:

$("#mybutton").click(function(ev){

   if (called from funcion One or Two){
     //my code
   }

});

而不是任何功能......(任何人?如果我错了,请纠正我......)

EDITED ..

啊......我现在看到......你想要动态点击......(思考......)

答案 2 :(得分:0)

您正在寻找arguments.callee。现在形成javascript 1.4它已被弃用。

See here了解详情。