0

ラジオボタンがチェックされているときに、ターゲット属性をいくつかのアンカーに追加しようとしています。ただし、機能していません。

これが私のコードです:

<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。あなたはおそらくそれをイベントハンドラーにするつもりなので、おそらく「チェック」ではなく「オンクリック」にする必要があります。

タグの「ターゲット」プロパティをその<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

私が知っているように、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 に答える
1

_blank編集したコードを使用して、ラジオボタンをクリックするたびにターゲットを設定します。またanchors、-collectionは適切ではありません-この場合に使用するものです。

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を持つドキュメント内の-elementsを含むコレクションオブジェクトです。コレクションオブジェクトは配列と非常によく似ており、そのメンバーをインデックス()で参照できます。hrefnohrefn

于 2012-04-14T12:35:45.787 に答える