传递jQuery thruh eval

时间:2013-09-16 17:50:49

标签: jquery eval

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?

1 个答案:

答案 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