2012-03-21 58 views
0

傳遞功能參數我有一個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傳遞功能參數?可能嗎?有人知道任何其他解決方案嗎?特別關注以參數爲參數的傳遞函數。 謝謝!

+0

看起來你逝去的函數名正確地作爲JSON字符串,最新的問題是什麼? – 2012-03-21 06:38:33

回答

2

正如JohnP所說,使用數據API似乎更合適。您需要以不同的方式定義函數名稱和參數,可能使用不同的數據鍵。

HTML:

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

JS/jQuery的:

一個使用數據API剝離下來例如

// 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/

+0

你給我提供了使用HTML5,但我重新在老派的風格。無論如何謝謝你,男孩! HTML:'linker ' jQuery:'window.foo = function(params){ alert(params); };點擊(功能(){ var param = $(this).attr(「name」); var data = JSON.parse(param); var fn = data.func, (typeof window [fn] =='function'){ window [fn](params); } });'' – Nolesh 2012-03-21 10:21:40

1

最好是使用jQuery的data API而不是使用name屬性來存儲您的JSON。

您不能將函數作爲JSON中的參數傳遞,因爲它只是文本,您可以傳遞函數名稱然後調用它。你只需要確保window[data.myFunc]是一個實際的功能。