使用 javascript,我生成 HTML 代码,例如添加一个通过单击链接启动的函数,例如:
$('#myDiv').append('<a href="javascript:start(\''+TERM+'\');">click</a>');
因此,如果有人点击链接(点击),则应该调用 start()
。
TERM
可以包含单个单词,例如 world
或 moody's
,生成的 HTML 代码如下所示:
<a href="javascript:start('world');">click</a>
或者
<a href="javascript:start('moody's');">click</a>
如您所见,第二个示例将不起作用。所以我决定“逃避”TERM
,如下所示:
$('#myDiv').append('<a href="javascript:start(\''+escape(TERM)+'\');">click</a>');
使用 firebug 查看 HTML 源代码,可以看到生成了以下代码:
<a href="javascript:start('moody%27s');">click</a>
效果很好,直到我真正单击该链接 - 因此浏览器(此处为 Firefox)接缝解释 %27
并尝试触发 start('moody's');
有没有办法在 JS 中处理术语之前转义持久性术语而不解释 %27
?除了使用正则表达式将 '
更改为 \'
之外,还有其他解决方案吗?
最佳答案
不要尝试生成内联 JavaScript。这样会带来太多的痛苦和维护 hell 。 (如果您要沿着这条路线走下去,那么您将使用 \
转义 JavaScript 字符串中的字符)。
改用标准事件绑定(bind)例程。
假设 $
是 jQuery,而不是使用该无用变量名称的许多其他库之一:
$('#myDiv').append(
$('<a>').append("click").attr('href', 'A sensible fallback').click(function (e) {
alert(TERM); // Because I don't have the function you were calling
e.preventDefault();
})
);
关于javascript - escape() 似乎不能始终如一地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688579/