将消息发送到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;
};
答案 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了解详情。