2012-04-14 107 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 2012-04-14 12:11:39

回答

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其具有hrefnohref或-attribute集合對象。集合對象與數組非常相似,您可以使用索引引用它的成員(n)。

+0

我對JavaScript沒有信心,所以你能解釋一下'link [n]'對我來說?至於[n]是什麼意思?謝謝。 – Harry 2012-04-14 12:37:35

+0

@Teemu爲什麼你提倡'document.getElementById(「input」).value' over this.value'? – Dennis 2012-04-14 13:14:31

+0

引用「鏈接[n]」的原始問題是什麼?[n]是什麼? – Harry 2012-04-14 14:56:01

2

您正在設置單選按鈕的「checked」屬性爲函數。 「checked」屬性是布爾值,它指示當前是否檢查單選按鈕。因此,該聲明具有將其設置爲true的效果。你可能打算讓它成爲一個事件處理程序,所以應該是「onclick」而不是「checked」。

設置<a>標籤的「目標」屬性不能像這樣完成。您必須使用document.getElementsByTagName(),然後遍歷返回的節點列表,設置每個節點的「目標」屬性。無需使用.setAttribute();只需在DOM節點上直接設置屬性即可。

+0

Is * what * correct ? – Pointy 2012-04-14 12:20:15

+0

我把它編輯成主要問題對不起 – Harry 2012-04-14 12:21:24

+0

不,不要使用'document.anchors'。使用'document.getElementsByTagName('a')'。 – Pointy 2012-04-14 12:23:55

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中的「target」屬性可以作爲DOM節點上的屬性直接訪問。不需要使用'.setAttribute()'。 – Pointy 2012-04-14 12:09:26

+0

@Pointy好趕上 – Dennis 2012-04-14 12:12:30

1

我所知,checked是一個屬性,所以你不能一個函數分配給它。 您可以在#input附加click事件改變錨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" />