2012-03-29 7 views
0

Ich habe einen Bild Tag eingeschlossen in einem Anker Elemente wie folgt:Deaktivieren Sie einen Anker oder Hyperlink, wenn Bild nicht gefunden

<a href='$image'><img alt='No Image' src='$image'></a> 

Ich finde, dass, wenn das Bild nicht vorhanden ist, kann ich immer noch auf klicken der Link. Ich möchte deaktivieren den Link, wenn das Bild nicht vorhanden ist. Was ist der beste Weg, dies zu tun?

aktualisieren:

Ich habe mplungjan-Lösung unter versucht, aber es hat nicht funktioniert. Ich bin bereit, jquery zu versuchen, wenn Javascript die Arbeit nicht erledigen kann.

+0

Ich reparierte meine Lösungen (I wurde mit Eltern statt parentNode) es funktioniert jetzt und eine der Lösungen ist die Verbindung mit dem Text ersetzt, die andere ersetzt das Bild mit Text. – mplungjan

Antwort

2

Diese Version funktioniert:

<a href='$image'> 
    <img alt='No Image' src='$image' onError="this.parentNode.onclick=function() {return(false);}"> 
</a>​ 

Sie es hier in Aktion sehen können: http://jsfiddle.net/jfriend00/2jb4G/

Oder eine gemeinsame Funktion, die Sie an mehreren Stellen verwenden können:

<script> 
function blockParentLink() { 
    this.parentNode.onclick = function() {return(false);} 
} 
</script> 

<a href='$image'> 
    <img alt='No Image' src='$image' onError="blockParentLink()"> 
</a>​ 

persönlich , Ich denke, es könnte nur sinnvoll sein, es zu verbergen, wenn es nicht zeigt, anstatt Klicks zu blockieren:

Sie können die Haut Version sehen hier: http://jsfiddle.net/jfriend00/KVUUM/

+0

Tausend Dank! Das funktioniert perfekt. Ich bin beeindruckt. Danke :) –

+0

@BenHuh - Ich habe gerade eine weitere Option hinzugefügt, die vielleicht besser ist. – jfriend00

+0

Ich muss einen alternativen Text "Kein Bild" anzeigen. Deshalb verstecke ich das Bild nicht, wenn es nicht gefunden wird. Danke, du verdienst mehr Daumen hoch. –

2

Disable = true nicht für mich arbeiten

Dies taten (mit parentNode!)

Innerhtml und Onclick:

<a href='#'><img alt='No Image' src='$image' 
    onError="this.parentNode.onclick=function(){return false}; 
    this.parentNode.innerHTML='Image not available'"></a> 

oder entfernen:

<a href='$image'><img alt='No Image' src='$image' 
onError="var lnk= this.parentNode; lnk.parentNode.removeChild(lnk)"></a> 

Oder ersetzen:

<a href='$image'><img alt='No Image' src='$image' 
onError="var lnk= this.parentNode; 
lnk.parentNode.replaceChild(document.createTextNode('No image'), lnk)"></a> 

DEMO

+0

Alles oben genannte funktioniert nicht. Mein Browser scheint 'this.parent' nicht zu erkennen. Ich benutze firefox 10. –

+0

@BenHuh - Das ist, weil das richtige Javascript 'this.parentNode' ist, nicht' this.parent'. – jfriend00

+0

@ jfriend00, danke für die Antwort auf mich. Ich habe den Code in "parentNode" geändert. Aber es hat auch nicht funktioniert. Könnte es etwas mit der DOM-Initialisierung zu tun haben? Vielen Dank. –

0

Dies ist ein kleines Stück Code, fand ich, dass

<img src="http://www.someurl.com/image.gif" height="100" width="100" onerror="alert('Image missing')"> 

statt ALERT für Sie nützlich sein können Sie eine jQuery-Funktion aufrufen um den Hyperlink zu entfernen. Lass es mich wissen, wenn du Hilfe mit der Jquery-Funktion brauchst!

+0

Würde es vorziehen, wenn Sie die Funktion präsentieren können, da es anderen Benutzern auch helfen könnte. –

Verwandte Themen