ObjectI在我的项目中使用了一些代码行,这些代码允许我做这样的事情:
<a href="#" data-click="test">Run test function</a>
点击它会运行test()
$("body").delegate( "a[data-click]", "click", function(){
var f = $(this).attr("data-click");
eval(f + "();");
});
我现在的问题是,一个函数需要有关被点击元素的信息(jQuery事件,特别是.currentTarget
)。
我尝试过:
$("body").delegate( "a[data-click]", "click", function(event){
var f = $(this).attr("data-click");
eval(f + "(" + JSON.stringify(event) + ");");
});
但这不起作用,因为event
是一个循环对象。 (我不知道一种序列化jQuery对象的方法,以便我可以对它进行反序列化,并且可以在其上调用jQuery函数)
那么如何传递jQuery EventObject?
答案 0 :(得分:2)
无需eval:
$("body").delegate("a[data-click]", "click", function(event) {
var f = window[$(this).data("click")];
f();
});
请注意,这只适用于您的函数位于全局范围内(或通过您可以指定的另一个对象而不是window
(全局对象))。
另请注意,您应使用on
代替delegate
:
$("body").delegate("a[data-click]", "click", function(event) { // old
$("body").on("click", "a[data-click]", function(event) { // new