通过 href 调用 JavaScript 函数?

3

我试图通过href调用JavaScript函数(不带参数),这样做可以正常工作,但是当我尝试通过href调用带参数的同一函数时,它会出现错误:意外的输入结尾。

infowindow.setContent("<table><tr><th>Name</th><td><a href='javascript:Institute('"+code+"')'>" + text + "</a></td></tr><tr><th>IP Address</th><td>" + ip + "</td></tr><tr><th>Code</th><td><a href='javascript:Institute();'>" + code + "</a></td></tr></table>");

你是如何传递参数的? - Nitish
2
在JavaScript中混合字符串以创建包含JavaScript的HTML是一种头痛的做法。不要这样做。使用DOM。使用createElement。使用createTextNode。使用appendChild。使用addEventListener。你的代码会更冗长,但是更容易理解、调试和维护。 - Quentin
我只是好奇:使用href而不是onclick事件有什么优势吗? - Niko
@Quentin 如果这是一个巨大的 HTML 块,我不建议使用 createElement。我同意 addEventListener 是一个更好的选择,但 OP 可以通过给可点击元素一个 id="some_button_id",然后使用 document.getElementById('some_button_id').addEventListener(...) 来获得最佳效果。 - asontu
@Niko - 不行。这会让事情变得更加复杂。应该是一个按钮而不是一个链接。 - Quentin
3个回答

2

这应该可以工作:

infowindow.setContent('<table><tr><th>Name</th><td><a href="javascript:Institute(\''+code+'\')">' + text + '</a></td></tr><tr><th>IP Address</th><td>' + ip + '</td></tr><tr><th>Code</th><td><a href="javascript:Institute();">' + code + '</a></td></tr></table>');

这样,结果的HTML在标签属性中使用双引号("),在JavaScript字符串中使用单引号('),这是确保不会出现冲突的最佳方式。

为了说明,这里使用document.write()alert()代替,但如果您点击Run code snippet,它将起作用。

var code = 'The Code';
var text = 'The Text';
var ip = 'The IP';

document.write('<table><tr><th>Name</th><td><a href="javascript:alert(\''+code+'\')">' + text + '</a></td></tr><tr><th>IP Address</th><td>' + ip + '</td></tr><tr><th>Code</th><td><a href="javascript:alert(\'empty string\');">' + code + '</a></td></tr></table>');


1
你的引号存在问题。 使用:<a href='javascript:Institute(\'"+code+"\')'> 如果使用浏览器的HTML调试工具,可以轻松找到它。

0
infowindow.setContent('<table><tr><th>Name</th><td><a href="javascript:Institute(\""+code+"\");' + text + '</a></td></tr><tr><th>IP Address</th><td>' + ip + '</td></tr><tr><th>Code</th><td><a href="javascript:Institute();">' + code + '</a></td></tr></table>');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接