我有一个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传递函数作为参数?可能吗?有人知道其他任何解决方案吗?特别注意以参数为参数传递函数。 谢谢!
答案 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);
}
});
答案 1 :(得分:1)
最好使用jquery的data API而不是使用name
属性来存储您的JSON。
您不能将函数作为参数传递给JSON,因为它只是文本,但您可以传递函数名称然后调用它。您只需要确保window[data.myFunc]
是一个实际的功能。