需要一些javascript语法帮助(简短问题)

需要一些javascript语法帮助(简短问题),javascript,html,Javascript,Html,我有一个外部js文件,我正在其中创建一个标记 问题是,如果要在下面的代码中添加onclick事件,我不知道如何使用引号 现在,该代码起作用了: banner_div.innerHTML = '<a href=\"'+links[counter]+'\"><img src=\"'+images[counter]+'\" border=\"1px\" style=\"border-color:#000;\" alt=\"'+alts[counter]+'\" title=\"'+t

我有一个外部js文件,我正在其中创建一个标记

问题是,如果要在下面的代码中添加onclick事件,我不知道如何使用引号

现在,该代码起作用了:

banner_div.innerHTML = '<a href=\"'+links[counter]+'\"><img src=\"'+images[counter]+'\" border=\"1px\" style=\"border-color:#000;\" alt=\"'+alts[counter]+'\" title=\"'+titles[counter]+'\"></a>';
我应该如何将onclick事件插入到第一段代码中以使其正常工作

谢谢


顺便说一句:上面的数组在for循环中迭代。因此,例如links[counter]包含links数组的当前索引,例如“www.somedomain.com”。

在单引号分隔的字符串中使用单引号似乎有问题。请记住,整个onclick=thing在由单引号包围的大字符串中。因此,只需对单引号进行反斜杠转义:

onclick="_gaq.push([\'_trackEvent\', \'Link Clicks\', \'From Index.html\', \'www.domain.com\']);"
我会避免使用innerHTML,特别是如果有很多替换的话。太多可能会出错。例如,如果alts[counter]有一些特殊的HTML字符,如
&
,该怎么办?我将使用DOM来操作对象。比如说

a = document.createElement("a");
a.href = links[counter];
a.setAttribute("onclick", "_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);")
img = document.createElement("img");
img.src = images[counter];
img.border = "1px";
img.style = "border-color:#000;";
img.alt = alts[counter];
img.title = titles[counter];
a.appendChild(img);
banner_div.appendChild(a);
虽然我没有测试就猜到了,所以可能有点错误


请注意,我使用了速记属性表示法来分配所有属性,但我使用了
setAttribute
来分配
onclick
,因为我尝试使用属性表示法,但它不适用于我(该规范允许您直接设置大多数属性,但不允许
onclick
).

您不必在单引号字符串中转义双引号(反之亦然),因此首先我们可以通过适当地交替引号类型来简化这一过程:

banner_div.innerHTML = '<a onclick="' + "_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);" + '" href="' + links[counter] + '"><img src="' + images[counter] + '" border="1px" style="border-color:#000;" alt="' + alts[counter] + '" title="' + titles[counter] + '"></a>';
banner_div.innerHTML='';
在我看来,这是一个比在公认的答案中进行DOM操作更简单的解决方案。我们不必转义任何一件事,我们也不使用任何函数,除了良好的旧字符串连接


为什么我们有两种引用?为了使大量引用(像这样)的场景变得简单

+1,回答得好。不过,最后一部分并不完全正确-一些浏览器允许您将字符串分配给
onclick
,但作为一般规则,您应该分配函数,例如
a.onclick=function(){u gaq.push([…,…]);}
@Andy E:你能找到一个规范来将函数对象分配给这样的属性吗?DOM HTML规范没有提到这些属性(它提供了一个特殊HTML属性列表,这些属性可以作为属性引用,而不是使用
setAttribute
)。HTML4规范(在脚本下)只提到了
onclick
等属性,它们接受包含脚本的字符串。我没有在许多不同的浏览器中尝试过这两种方法,但从规范的阅读来看,
setAttribute
似乎是绝对标准化的,而另一种方法我找不到参考。@mguica:我认为在HTML5之前没有一个可靠的定义,它指定事件处理程序作为IDL属性公开(接口属性),也可能作为内容属性公开。IDL属性需要一个
函数
对象,内容属性需要一个有效的
函数体
表示。您可以阅读更多信息。浏览器的许多互操作功能在规范中刚刚达到正式定义。
banner_div.innerHTML = '<a onclick="' + "_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);" + '" href="' + links[counter] + '"><img src="' + images[counter] + '" border="1px" style="border-color:#000;" alt="' + alts[counter] + '" title="' + titles[counter] + '"></a>';