2012-04-14 16 views
0

ラジオボタンがチェックされているときに、ターゲット属性をいくつかのアンカーに追加しようとしています。しかし、それは動作していません。ここでJavaScript:属性を追加するにはどうすればよいですか?

は私のコードです:私は間違っ

<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ソリューションは必要ありません)

ありがとうございました。

編集:Phew。あなたが関数にラジオボタンのプロパティを「確認」に設定している

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'; 
     } 
    } 
} 
+1

http://stackoverflow.com/questions/804256/how-do-i-add-target-blank-to-a-link-within-a-specified-divこれを確認することができます – mfadel

答えて

1

あなたはアンカーtargetを変更する#input上のクリックイベントを添付することができ ラジオボタンをクリックすると表示されます。またanchors - コレクションは、この場合に使用する正しいものではありません。

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.linkshref又はnohref -attributeを有する文書でA -elementsを含むコレクションオブジェクトです。コレクションオブジェクトは配列と非常によく似ており、インデックス(n)を持つメンバを参照できます。

+0

私はJavaScriptを使用して自信を持っていないよので、あなたは私に 'リンク[n]は'それを説明することができますか? [n]はどういう意味ですか?ありがとう。 – Harry

+0

@Teemuなぜあなたは 'this.value'オーバー'のdocument.getElementById( "入力")。[値]を提唱していますか? – Dennis

+0

'リンクの参照元の質問[N]についてどのような' '[n]は'については何ですか? – Harry

2

:すべての答えに感謝をし、ここに私の最終的なコードです。チェックされたプロパティはブールで、ラジオボタンが現在チェックされているかどうかを示します。したがって、そのステートメントはtrueに設定するという効果があります。おそらく、それをイベントハンドラにするつもりで、おそらく "checked"の代わりに "onclick"であるべきです。

<a>タグの「target」プロパティを設定することは、そのように行うことはできません。 document.getElementsByTagName()を使用し、返されたノードリストを反復処理し、それぞれの "target"プロパティを設定する必要があります。使用する必要はありません.setAttribute(); DOMノードに直接プロパティを設定するだけです。

+0

* * *正しいですか? – Pointy

+0

私は主な質問にそれを編集しました申し訳ありません – Harry

+0

いいえ、 'document.anchors'を使用しないでください。 'document.getElementsByTagName( 'a')'を使用してください。 – Pointy

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だけname属性でアンカーを返す - gEBTNは、アンカーのすべてを返します。また

:私は知っているように、あなたがそれに機能を割り当てることができませんので

document.getElementById('input').addEventListener("click", changeTarget, false); 
+0

HTMLから「ターゲット」属性は、DOMノード上の直接プロパティとしてアクセス可能です。 '.setAttribute()'を使う必要はありません。 – Pointy

+0

@Pointy良いキャッチ – Dennis

1

checkedプロパティがあります。

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'; 
     } 
} 

UPDATE:あなたは_blankにターゲットを毎回設定し、編集したコードと私のコード#inputでなければなりませんチェックボックス

<input type="checkbox" id="input" /> 
関連する問題