通过链接jQuery将函数作为参数传递

时间:2012-03-21 06:31:10

标签: javascript jquery

我有一个jQuery代码:

$('a[name=dialog]').click(function(e) {          
    var param = $(this).attr("name");       
    var param = replaceAll(param,"'","\"");     
    var data = JSON.parse(param);
    $("dialogTitle").text(data.caption);
    $("dialogBody").text(data.bodyText);
 /* here I'm trying to assign event to button*/
   $("#OkButton").click(window[data.myFunc]);   
});
});

在html代码中:

<ul>
<li><a href="#dialogConfirmation" name="{'caption':'MyCaption', 'bodyText':'BODY TEXT!!!', 'myFunc':'foo'}">link</a></li>
</ul>
<script>
function foo(){
alert('test');
};

我的问题是如何通过JSON传递函数作为参数?可能吗?有人知道其他任何解决方案吗?特别注意以参数为参数传递函数。 谢谢!     

2 个答案:

答案 0 :(得分:2)

正如JohnP所说,使用数据API似乎更合适。您需要以不同的方式定义函数名称和参数,可能使用不同的数据键。

使用数据API的简化示例:

HTML:

<a href='#' data-fn='foo' data-params='{"john":"doe"}'>link</a>​

JS / jQuery的:

// define the function
window.foo = function(params) {
    console.log(params); // the params object
};
$('a').click(function() {

    // grab the function name and params from data
    var fn = $(this).data('fn'),
        params = $(this).data('params');

    // execute
    if ( typeof window[fn] == 'function' ) {
        window[fn](params);
    }
});​

小提琴:http://jsfiddle.net/jzRPa/

答案 1 :(得分:1)

最好使用jquery的data API而不是使用name属性来存储您的JSON。

您不能将函数作为参数传递给JSON,因为它只是文本,但您可以传递函数名称然后调用它。您只需要确保window[data.myFunc]是一个实际的功能。