2011-01-14 11 views
0

Ich habe eine externe JS-Datei, die ich in einen Tag erschaffe.wenig JavaScript-Syntax Hilfe benötigt (kurze Frage)

Problem ist, ich weiß nicht, wie die Zitate zu verwenden, wenn ich bin ein Onclick-Ereignis hinzufügen zu dem Code unten.

Jetzt dieser Code funktioniert:

banner_div.innerHTML = '<a href=\"'+links[counter]+'\"><img src=\"'+images[counter]+'\" border=\"1px\" style=\"border-color:#000;\" alt=\"'+alts[counter]+'\" title=\"'+titles[counter]+'\"></a>'; 

Aber ich muß dies die oben hinzuzufügen:

onclick="_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);" 

Wie soll ich das Onclick-Ereignis mit dem ersten Stück Code einfügen, damit es funktioniert?

Dank

BTW: Die Arrays oben sind im Inneren einer for-Schleife iteriert. So enthält beispielsweise links [counter] den aktuellen Index des Links-Arrays, der beispielsweise "www.somedomain.com" sein könnte.

Antwort

1

Sieht aus wie ein Problem mit der Verwendung von einfachen Anführungszeichen in einer durch Trennzeichen getrennten Zeichenfolge. Denken Sie daran, das ganze onclick = ding befindet sich innerhalb der großen Zeichenfolge, die von einfachen Anführungszeichen umgeben ist. Also nur Backslash-entkommen die einfachen Anführungszeichen:

onclick="_gaq.push([\'_trackEvent\', \'Link Clicks\', \'From Index.html\', \'www.domain.com\']);" 

Ich möchte vermeiden, innerHTML- verwenden, vor allem, wenn Sie eine Menge von Substitutionen haben. Zu viel kann schief gehen. Zum Beispiel, was wenn alts [counter] einige spezielle HTML-Zeichen wie & hat? Ich würde das DOM stattdessen verwenden, um das Objekt zu manipulieren. Zum Beispiel

a = document.createElement("a"); 
a.href = links[counter]; 
a.setAttribute("onclick", "_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);") 
img = document.createElement("img"); 
img.src = images[counter]; 
img.border = "1px"; 
img.style = "border-color:#000;"; 
img.alt = alts[counter]; 
img.title = titles[counter]; 
a.appendChild(img); 
banner_div.appendChild(a); 

Obwohl ich vermuten, dass es ohne Prüfung, so dass es ein bisschen falsch sein könnte.

Bitte beachte, dass ich kurz Hand Eigenschaft Notation verwendet, um alle Attribute zuweisen, aber ich verwendet setAttributeonclick zuweisen, weil ich versucht, die Eigenschaft Notation und es nicht für mich arbeiten (die DOM HTML Spezifikation ermöglicht es Ihnen, die meisten zu setzen Eigenschaften direkt, aber nicht onclick).

+0

+1, gute Antwort. Dieser letzte Teil ist jedoch nicht ganz richtig - einige Browser erlauben es Ihnen, eine Zeichenfolge zu "onclick" zuzuweisen, aber als allgemeine Regel sollten Sie eine Funktion zuweisen, z. 'a.onclick = function() {_gaq.push ([..., ...]); }; '. –

+0

@Andy E: Können Sie eine Spezifikation für das Zuweisen eines Funktionsobjekts zu einer Eigenschaft wie diesem finden? Die DOM-HTML-Spezifikation erwähnt diese Eigenschaften nicht (sie gibt eine Liste spezieller HTML-Attribute an, die als Eigenschaften referenziert werden können, anstatt 'setAttribute' zu ​​verwenden). Die HTML4-Spezifikation (unter Scripts) erwähnt lediglich, dass "onclick" und dergleichen Attribute sind, die Strings enthalten, die das Skript enthalten. Ich habe nicht die beiden Ansätze in vielen verschiedenen Browsern versucht, aber aus einem Lesen der Spezifikationen, scheint es, als wäre 'setAttribute' definitiv standardisiert, während der andere Ansatz kann ich keine Referenz finden. – mgiuca

+1

@mguica: Ich glaube nicht, dass es bis HTML5 eine solide Definition gab, die angibt, dass Ereignishandler als IDL-Attribute (Schnittstelleneigenschaften) verfügbar gemacht werden und auch als Inhaltsattribute verfügbar gemacht werden können. IDL-Attribute erwarten ein 'Function'-Objekt, Inhaltsattribute erwarten eine gültige' FunctionBody'-Repräsentation. Sie können mehr über [es hier] lesen (http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-handlers). Es gibt viele interoperable Funktionen von Browsern, die gerade erst eine formale Definition in den Spezifikationen erreichen. –

0

Sie müssen doppelte Anführungszeichen in einer Single-String in Anführungszeichen (und umgekehrt) nicht entgehen, so zunächst können wir diese ziemlich viel vereinfachen, indem sie nur entsprechend quote-Typ abwechselnd:

banner_div.innerHTML = '<a onclick="' + "_gaq.push(['_trackEvent', 'Link Clicks', 'From Index.html', 'www.domain.com']);" + '" href="' + links[counter] + '"><img src="' + images[counter] + '" border="1px" style="border-color:#000;" alt="' + alts[counter] + '" title="' + titles[counter] + '"></a>'; 

Meiner Meinung nach ist dies eine einfachere Lösung als die DOM-Manipulation in der akzeptierten Antwort. Wir müssen uns nicht einer einzigen Sache entziehen, und wir verwenden keine einzige Funktion außer einer guten alten String-Verkettung.

Warum haben wir zwei Arten von Anführungszeichen? Um Szenarien mit vielen Zitaten (so) einfach zu machen!