2012-04-14 27 views
0

Ich versuche, das Zielattribut zu einigen Ankern hinzuzufügen, wenn ein Optionsfeld aktiviert ist; aber es funktioniert nicht.JavaScript: Wie füge ich ein Attribut hinzu?

Hier ist mein Code:

<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> 

Was mache ich falsch? (Hinweis: Ich möchte keine JQuery-Lösung)

Vielen Dank.

Bearbeiten: Puh. Fertig es dank all der Antworten, hier ist mein letzter Code:

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 Sie können dies überprüfen – mfadel

Antwort

1

Mit bearbeiteten Code stellen Sie die Ziele jedes Mal _blank wenn Sie auf das Optionsfeld klicken. Auch anchors -collection ist in diesem Fall nicht die richtige.

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 ist eine Sammlung-Objekt enthält den A -Elemente in dem Dokument, die einen oder hrefnohref -Attribut haben. Ein Auflistungsobjekt ist einem Array sehr ähnlich, und Sie können auf seine Elemente mit einem Index verweisen (n).

+0

Ich bin nicht mit JavaScript vertraut, also kannst du 'Links [n]' das für mich erklären? Wie in was bedeutet das [n]? Vielen Dank. – Harry

+0

@Teemu Warum befürworten Sie 'document.getElementById (" input "). Value' über' this.value'? – Dennis

+0

Was ist mit der ursprünglichen Frage, die sich auf 'Links [n]' bezieht, wofür ist '[n]'? – Harry

2

Sie Einstellung der auf eine Funktion Eigenschaft des Optionsfelds „geprüft“. Die Eigenschaft "checked" ist eine boolean, die angibt, ob der Radiobutton gerade überprüft wird. Diese Anweisung bewirkt also, dass sie auf true gesetzt wird. Sie haben wahrscheinlich vor, dass dies ein Event-Handler sein sollte, so dass es wahrscheinlich "onclick" statt "checked" sein sollte.

Einstellen der "Ziel" -Eigenschaft der <a> Tags kann nicht so erreicht werden. Sie müssen document.getElementsByTagName() verwenden und dann durch die zurückgegebene Knotenliste iterieren, indem Sie die "target" -Eigenschaft der einzelnen Knoten festlegen. Keine Notwendigkeit zu verwenden .setAttribute(); Setzen Sie die Eigenschaft einfach direkt auf die DOM-Knoten.

+0

Ist * was * korrekt ? – Pointy

+0

Ich habe es in die Hauptfrage bearbeitet. Sorry – Harry

+0

Nein, benutze 'document.anchors' nicht. Verwenden Sie 'document.getElementsByTagName ('a')'. – Pointy

2

document.anchors ist eine Sammlung, so dass Sie darüber iterieren müssen. Sie möchten auch das Ereignis onclick - dort können Sie feststellen, ob die Eingabe aktiviert ist oder nicht.

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 Nach - document.anchors liefert nur Anker mit einem Namensattribut - gEBTN alle der Anker zurück.

Alternativ:

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

Das "target" -Attribut aus HTML ist als Eigenschaft direkt auf den DOM-Knoten verfügbar. Keine Notwendigkeit, '.setAttribute()' zu verwenden. – Pointy

+0

@Pointy Guter Fang – Dennis

1

ich weiß, checked ist eine Eigenschaft, so dass Sie nicht eine Funktion zuweisen können. Sie können ein Klickereignis auf #input befestigen Anker target zu ändern:

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: In meinem Code #input muss eine Checkbox

<input type="checkbox" id="input" /> 
Verwandte Themen