2012-08-13 69 views
1

我試圖添加target="_blank"到鏈接取決於複選框,點擊頁面上的鏈接。添加目標=「空白」使用JavaScript

在JavaScript端我有:

function newTab(v) { 
     if(v.tab.checked == true) { 
     document.getElementsByTagName('a').setAttribute('target', '_blank'); 
     } else { 
     document.getElementsByTagName('a').setAttribute('target', '_self'); 
     } 
    } //end function 

而在HTML身邊,我有:

<form> 
    <input type="checkbox" name="tab" onclick="newTab(this.form)" /> 
    <label>Open Links In New Tab?</label> 
</form> 

<a href="//mail.google.com">Gmail</a>

當然它並不像我想的那樣簡單是的,所以它不起作用。

該頁面包含了十幾個環節,所以我需要的複選框,適用於網頁上的所有鏈接 - 爲什麼我用getElementsByTagName()。任何幫助感謝!

編輯:即工作如下:

代碼:

function newTab(f) { 
    var els = document.getElementsByTagName('a'); //read anchor elements into variable 
    if(f.tab.checked == true) { //If the box is checked. 
     for (var i in els) { 
     els[i].setAttribute('target', '_blank'); //Add 'target="blank"' to the HTML 
     } 
    } else { // not checked... 
     for (var i in els) { 
     els[i].setAttribute('target', '_self'); //Add 'target="self" to HTML 
     } 
    } 
    } //end function. 
+3

你知道你設置'taget'不'target'? – Nick 2012-08-13 11:29:42

+1

你有一個錯字錯誤。相反,「目標」你寫了「taget」 – Nuxy 2012-08-13 11:29:46

+1

變化taget目標 – 2012-08-13 11:29:58

回答

4

getElementsByTagName()返回一個節點集。您需要遍歷它,並依次將更改應用於每個更改。你現在擁有的更像是jQuery語法,它在內部爲你處理。

這將在控制檯中顯示了。隨着JS問題,總是檢查控制檯之前,想知道什麼是錯的。

var els = document.getElementsByTagName('p'); 
for (var i=0, len = els.length; i<len; i++) 
    els[i].setAttribute('name', 'value'); 

此外,與複選框使用更改,而不是點擊事件,因爲有人可能通過鍵盤,而不是鼠標切換它們。最後,您應該着眼於集中處理您的事件,而不是HTML中指定的內聯DOM零事件。許多原因超出了這個問題的範圍。

+0

我使用.checked無論他們如何檢查框中的工作。此外,你的代碼的輕微mod得到它的工作 謝謝 – 2012-08-13 12:33:29