如何将onclick事件添加到没有id';谁在使用javascript?

如何将onclick事件添加到没有id';谁在使用javascript?,javascript,Javascript,我试过这样做,但似乎不起作用: window.onload = initAll; function initAll(){ document.getElementsByTagName('a').onclick = clickHandler; } function clickHandler(){ if(this.toString().indexOf("localhost") < 0) { confirmation

我试过这样做,但似乎不起作用:

 window.onload = initAll;


    function initAll(){
    document.getElementsByTagName('a').onclick = clickHandler;
     }

    function clickHandler(){
        if(this.toString().indexOf("localhost") < 0) {
            confirmation = confirm("You are now leaving http://soso.com.  Please click 'ok' to continue to this site, or 'cancel' to stay in http://soso.com");
                if (confirmation == false){
                    return false;
                }

        }

    }
window.onload=initAll;
函数initAll(){
document.getElementsByTagName('a')。onclick=clickHandler;
}
函数clickHandler(){
if(this.toString().indexOf(“localhost”)<0){
确认(“您现在要离开了http://soso.com.  请单击“确定”继续访问此网站,或单击“取消”继续访问http://soso.com");
如果(确认==错误){
返回false;
}
}
}
我知道我可以获取ElementById,这是可行的,但它不是这样工作的。任何帮助都将不胜感激


谢谢

您需要迭代
document.getElementsByTagName返回的所有元素

var links = document.getElementsByTagName('a');
var i = links.length;
while ( i-- ) {
    links[i].onclick = clickHandler;
}
// ... rest of your code ...
函数initAll()
{
var elements=document.getElementsByTagName('a');//返回一个数组
//将处理程序添加到每个元素
var n;
对于(n=0;n
这是因为
getElementsByTagName
返回一个
节点列表
。不能通过
节点列表
上的
onclick
属性分配事件处理程序,只能分配单个
doElement

尝试:

var elems=document.getElementsByTagName('a');
对于(变量i=0;i
我强烈建议使用JQuery。像这样的事情应该可以做到:

$(function(){$('a').click(clickHandler);});
getElementsByTagName('a')返回DOM元素的节点列表。因此,对于初学者,您必须对它们进行迭代,并向每个对象附加一个处理程序,如下所示:

var links = document.getElementsByTagName('a');
for( var i=0,il = links.length; i< il; i ++ ){
 links[i].onclick = clickHandler;
}
var links=document.getElementsByTagName('a');
对于(var i=0,il=links.length;i

如果有很多元素,我建议您阅读并为所有元素分配一个处理程序。

document.getElementsByTagName是否返回数组?您可能需要遍历返回的数组并分配处理程序?JQuery是专门为这类工作设计的。您可以使用Jquery吗?如果没有更简单的修复方法,我正在考虑使用Jquery插入onclick处理程序,是的。用
int
替换为
var
,这是无效的Javascript.int n;:O:O。JavaScript中没有int。另外,您可能需要计算一次长度属性。在这种情况下,它可能会导致严重的问题,因为getElementsByTagName返回一个活动的元素列表。@Rajat只有在OP特别更改它时,列表才会更改,在这种情况下,他可能需要一个最新长度的引用。不过,您的建议对于优化固定长度的列表来说是一个很好的建议。虽然jQuery确实使使用DOM变得更容易,但当使用125个字符时,页面上包含24KB的代码(缩小和压缩),这是一个相当过分的技巧。;-)@肖恩:125个unicode字符需要4KB的代码。将所有这些代码内联到您的文档中(这可能是他正在做的事情)在许多页面请求中快速增加到24KB。如果您使用Google的托管副本,您可以利用其快速、分布式服务器快速提供JQuery,用户很可能已经缓存了JQuery。这还意味着您可以在应用程序中的任何其他位置使用JQuery来创建简洁、跨浏览器兼容的代码。除非这是他唯一会使用javascript的地方,否则我认为这是一个不需要动脑筋的地方。“125个unicode字符需要4KB的代码。”你确定吗?在UTF-8中是125字节,不是吗?在UTF-32中为125*4或500字节。您的条件是错误的。应该是
i>0
。你也可以结合你的减量和条件来得到
while(i--)
。那么
while(i--){links[i].onclick=clickHandler;}
?@lincolnk@palswim——好的观点。。。更新为更明智一点(和工作…你知道,当我们修复东西时):-)谢谢!您忘记了条件后面的分号。
$(function(){$('a').click(clickHandler);});
var links = document.getElementsByTagName('a');
for( var i=0,il = links.length; i< il; i ++ ){
 links[i].onclick = clickHandler;
}