2011-10-15 82 views
1

我有一個這樣的字符串:jQuery的追加自動解碼HTML編碼字符串

var b = "<button type='button' onclick='javascript:"+f+"(\""+ encodedString+"\");'> hi</button>" 
    //encodedString = "a &quot; &lt;hr&gt; &lt;br&gt;" 

,我這樣做後:在此之後

$('li').append(b); 

的encodedString變得解碼和我的onclick不因爲&quot變爲"

回答

1

而不是通過html直接設置click事件,綁定事件列表ENER。 eval(f)允許你通過一個字符串來引用函數。如果可能的話,我建議通過直接引用該函數。

如果函數在全局範圍內定義,請使用window[f]。注意:如果f看起來像Math.round,則這不起作用,因爲window["Math.round"] != window["Math"]["round"]

//f is a string which contains a single function name. 
var b = $('<button>').click(function(){ 
    eval(f)(encodedString); 
}); 
$('li').append(b); 

如果f是一個動態可變的,從而改變(例如,在一個循環中),包中的代碼的匿名函數:

(function(f){ 
    var b = $('<button>').click(function(){ 
     f(encodedString); 
    }); 
    $('li').append(b); 
})(eval(f)); 
+0

我的功能是未知的,我有'F',其是字符串函數名 – Omu

+0

@ChuckNorris試試我的答案。 'Function(「return」+ f)'是一種將函數名稱轉換爲函數引用的方法。另一種方法是使用'eval(f)'(而不是'Function('return'+ f)')。 –