这一行:
return '<a href="javascript:SomeFunction('+ var1 + ',' + var2 + ')"; > Stars </a>';
呈现:
<a href="javascript:SomeFunction(Pure Magic,4)" ;=""> Stars </a>
看起来像一个正确的锚标签,但在点击它时会出现此错误:
参数列表之后的Uncaught SyntaxError:missing)
我确信这个错误会产生误导,因为有问题的括号就在那里。
我错过了什么?
提前致谢。
答案 0 :(得分:2)
由于var1
包含字符串值,因此您需要引用它:
return '<a href="javascript:SomeFunction(\'' + var1 + '\',' + var2 + ');"> Stars </a>';
如果字符串可以包含需要转义为字符串文字的字符,或者需要进行URI编码,则需要更多代码:
return '<a href="javascript:' + encodeURIComponent('SomeFunction(\'' + var1.replace("\\", "\\\\").replace("'", "\\'") + '\',' + var2 + ');') + '"> Stars </a>';
生成这样的代码很复杂,很容易弄错。如果可能,您应该生成元素,以便您可以直接设置属性而不是为其创建代码。使用jQuery的示例:
return $('<a>', { href: '#', text: ' Stars ' }).click(function(e){
e.preventDefault();
SomeFunction(var1, var2);
});
答案 1 :(得分:1)
你最后在双引号中有错误
return '<a href="javascript:SomeFunction('+ var1 + ',' + var2 + ');" > Stars </a>';
答案 2 :(得分:0)
您没有将第一个var(似乎是一个字符串)包装在引号内。
return '<a href="javascript:SomeFunction(\''+ var1 + '\', ' + var2 + ');" > Stars </a>';
注意:正如Paul S.的评论所指出的那样,分号应该在双引号内,因为它是属性值的一部分。
答案 3 :(得分:0)
由于您只想添加带有 href 的<a>
,请让浏览器使用String.prototype.link
' Stars '.link('javascript:SomeFunction(' + JSON.stringify(var1) + ', ' + JSON.stringify(var2) + ')');
// <a href="javascript:SomeFunction("Pure Magic", 4)"> Stars </a>
如果您经常遇到这样的问题,请考虑切换到使用 DOM方法是否更容易,即
var a = document.createElement('a');
a.addEventListener('click', SomeFunction.bind(a, var1, var2));
这样您就不必编写实体编码等来保护自己在每个级别上解释代码( JavaScript , HTML , JavaScript )并且意味着您可以通过 HTML 更多地直接访问 DOM树