使用javascript,我会生成HTML代码,例如添加一个以点击链接开头的功能,例如:
$('#myDiv').append('<a href="javascript:start(\''+TERM+'\');">click</a>');
如果有人点击链接(点击),应该调用start()
。
TERM
可以包含一个单词,例如world
或moody's
,生成的HTML代码如下所示:
<a href="javascript:start('world');">click</a>
OR
<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
?是否有其他解决方案而不是使用正则表达式将'
更改为\'
?
答案 0 :(得分:3)
不要尝试生成内联JavaScript。那种方式太痛苦和维护地狱。 (如果你要沿着那条路走下去,那么你将使用\
转义JavaScript字符串中的字符。
改为使用标准事件绑定例程。
假设$
是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();
})
);
答案 1 :(得分:0)
escape()
函数用于转义通过网络而不是字符串的url。我不知道有一个内置的函数来逃避JavaScript的字符串,但是你可以试试我在网上找到的那个:http://www.willstrohl.com/Blog/EntryId/67/HOW-TO-Escape-Single-Quotes-for-JavaScript-Strings。
用法:EscapeSingleQuotes(strString)
编辑:注意到有关正则表达式的说明。这个解决方案 使用正则表达式,但我认为没有错: - )
答案 2 :(得分:0)
escape()用于url编码的东西,而不是用于放入字符串文字。您的代码存在严重缺陷,原因有多种。
如果您想要onclick事件,请使用onclick事件。不要试图用你的标记“注入”javascript代码。如果变量中包含“字符串”,则除非生成URL或其他受限制的术语,否则不应替换其中的任何内容。
var element = $('<span>click</span>');
element.bind('click', function () { start(TERM); });
$('#myDiv').append(element);
如果您不知道这是做什么的,那么请回到基础并了解javascript中的事件和函数引用。