0

I'm trying to add the target attribute to some anchors when a radio button is checked; 但是它不起作用。

这是我的代码:

<body>
<ul id="main">
    <li><a href="https://www.google.co.uk/">Google</a></li>
    <li><a href="http://www.youtube.com/">YouTube</a></li>
    <li><a href="https://twitter.com/">Twitter</a></li>
</ul>
<input type="radio" name="input" id="input" />
<script type="text/javascript">
document.getElementById('input').checked = function changeTarget() {
    document.anchors.setAttribute('target', '_blank');
}
</script>
</body>

我究竟做错了什么?(注意:我不想要 JQuery 解决方案)

谢谢。

编辑:呸。感谢所有答案,这是我的最终代码:

    document.getElementById('input').onclick = function changeTarget() {
    if(this.checked) {
        var b = document.getElementsByTagName('a');
        for (a = 0; a < b.length; a++) {
            b[a].target = '_blank';
        }
    }
}
4

4 回答 4

2

您正在将单选按钮的“选中”属性设置为一个函数。“checked”属性是一个布尔值,指示当前是否选中了单选按钮。因此,该语句具有将其设置为 的效果true。您可能打算让它成为一个事件处理程序,因此它可能应该是“onclick”而不是“checked”。

设置标签的“目标”属性<a>不能这样完成。您必须使用document.getElementsByTagName()然后遍历返回的节点列表,设置每个节点的“目标”属性。无需使用.setAttribute();只需直接在 DOM 节点上设置属性。

于 2012-04-14T12:08:00.687 回答
2

document.anchors是一个集合,因此您需要对其进行迭代。您还需要该onclick事件 - 在那里您可以确定是否检查输入。

document.getElementById('input').onclick = function changeTarget() {
    if( this.checked ) {
        var anchors = document.getElementsByTagName("a");
        for(var i = anchors.length - 1; i>=0; i--) {
            anchors[i].target = '_blank';
        }
    }
}

根据 MDN -document.anchors仅返回具有名称属性的锚点 - gEBTN 将返回所有锚点。

或者:

document.getElementById('input').addEventListener("click", changeTarget, false);
于 2012-04-14T12:08:23.197 回答
1

使用您编辑的代码,您每次_blank单击单选按钮时都将目标设置为。在这种情况下, -collectionanchors也不适合使用。

document.getElementById('input').onclick = function changeTarget() {
    var n,a=document.links.length;
    if(document.getElementById('input').checked){
        for(n=0;n<a;n++){
            document.links[n].target='_blank';
        }   
    }
}

document.links是一个集合对象,包含A文档中具有href或- 属性的 -nohref元素。集合对象与数组非常相似,您可以使用索引 ( n) 来引用它的成员。

于 2012-04-14T12:35:45.787 回答
1

据我所知,checked是一个属性,所以你不能给它分配一个函数。您可以附加点击事件#input以更改锚点target

document.getElementById('input').onclick = function()
{
    var anchors = document.getElementsByTagName('a');
    if(this.checked)
        for(var i = 0, s = anchors.length; i < s; i++) {
          anchors[i].target = '_blank';
        }
    else
        for(var i = 0, s = anchors.length; i < s; i++) {
          anchors[i].target = '_self';
        }
}

更新:在我的代码中#input 必须是一个复选框

<input type="checkbox" id="input" />
于 2012-04-14T12:11:38.180 回答