this.name在javascript中返回undefined

时间:2011-04-03 07:40:00

标签: javascript element onload

我正在尝试为每个div远程创建一个onclick(以节省打字时间)。这是window.onload函数;

window.onload = function() {
            divel = document.getElementsByTagName('div');
            for(var el in divel){
                divel[el].onmouseover = function(){ this.style.textDecoration = "underline"; };
                divel[el].onmouseout = function(){ this.style.textDecoration = "none"; };
                divel[el].onclick = function(){ document.getElementById('game').src = "/games/" + this.name; };
            }
}

每个div的名称都是“flyingsheep” - 这个值是由传统的< div name =“flyingsheep”>

当我点击div时,iframe“游戏”将我带到网页“/ games / undefined”

提前致谢。

(在Google Chrome和Fennec中测试过(我不知道最传统的浏览器))

3 个答案:

答案 0 :(得分:12)

这会奏效。问题得到纠正。

只需使用:this.attributes["name"].value

window.onload = function() { 
        divel = document.getElementsByTagName('div');
        for(var el in divel){
        window.alert(divel[el].name);
            divel[el].onmouseover = function(){ this.style.textDecoration = "underline"; };
            divel[el].onmouseout = function(){ this.style.textDecoration = "none"; };
            divel[el].onclick = function(){document.getElementById('game').src = this.attributes["name"].value;} 
        }
}

答案 1 :(得分:1)

很难确定问题是肯定的,因为我无法访问您的测试用例,因此我看不到任何错误或尝试调整它以使其工作,但有些问题是:< / p>

<div name="flyingsheep">不是传统的,它是无效的。 div元素有no name attribute

如果JS在您尝试设置divel.length.onmouseover时抛出错误,我不会感到惊讶 - 请勿在类似对象的数组上使用for ( foo in bar ),使用普通计数器。

我最好的理论是你有更多div个元素,然后是你关心的元素,而且点击其中一个元素(一个没有name属性),可能包含你想要的那个点击)激活JS功能。

答案 2 :(得分:1)

In jquery您可以改为使用:

$(this).attr("name");