2011-01-16 15 views
0

ich folgende Inline-Javascript-Code haben:Javascript Inline-Display-Unterschied zwischen den Browsern?

<a href="javascript:{ document['example'].src = 'cube.png'; document.getElementById('constructor').innerHTML = 'Mesh mesh = new Mesh.Cube();'; }">Cube</a> 

Für Ihre schlechte müde Programmierer Augen, hier ist die erweiterte Version:

document['example'].src = 'cube.png'; 
document.getElementById('constructor').innerHTML = 'Mesh mesh = new Mesh.Cube();'; 

Dieser Code als Hyperlink fungiert, die das example Bild zu einem Bild ändert eines 3D - Würfels und ändert einen <pre id="constructor"> Inhalt in den entsprechenden Konstruktor. (Dies ist offensichtlich eine Tutorial-Seite).

Dies funktioniert in Chrome völlig in Ordnung, aber in anderen Browsern, bekomme ich entweder eine neue Seite oder den Inhalt der gesamten Seite geändert:

Mesh mesh = new Mesh.Cube(); 

Was mit dem Code ist das Problem? Was mich verwirrt ist, dass es in einem Browser und nicht in einem anderen gültig ist. Es ist, als ob das Skript das Konstruktorelement nicht finden konnte und die gesamte Seite als Fallback vorgeschlagen hat. Ich bin weit davon entfernt ein Javascript-Experte zu sein, also ist das nur eine wilde Vermutung.

+0

NB: 'Dokument [‚Beispiel‘]' ist kein guter Weg, um ein Bild zu verweisen. Ich nehme an, es ist der 'name' eines Bildes, dann sollten Sie' document.images ['example'] 'verwenden, oder stattdessen eine' id' und 'getElementById' verwenden. – RoToRa

Antwort

0

ich nur antworten

Die href verhält sich anders als jedes onXXX-Ereignis (daher Javascript: Protokoll). Es versucht irgendwie, neue Dokumente zu laden und etwas hinein zu legen. Das Schlimmste ist, dass es alle Ausgaben erfasst. Also, um es zu arbeiten, wie sie ist, müssen Sie alle Anweisung Werte als Zuweisungen fangen:


var x = document['example'].src = 'cube.png'; 
var y = document.getElementById('constructor').innerHTML = 'Mesh mesh = new Mesh.Cube();'; 

alle in javascript:{...} natürlich.

Auch einige gute Kommentare und Erklärungen hier: http://www.west-wind.com/weblog/posts/9899.aspx

1

Nun, ich muss sagen, ich habe diese Art von Notation noch nie in einem Anker-Link gesehen, mit dem Braket, um einen Code darin zu setzen, meine ich.

Ich habe in Chrome versucht, es hat tatsächlich funktioniert, aber nicht in FireFox.

Vielleicht möchten Sie wie, dass, obwohl versuchen:

href="javascript:(function(){ document['example'].src = 'cube.png'; document.getElementById('constructor').innerHTML = 'Mesh mesh = new Mesh.Cube();'; })()" 

Aber um ehrlich zu sein, ich würde nur eine Hilfsfunktion erstellen und nennen es direkt wie:

href="javascript:myFunction('Cube')" 

Oder so ähnlich (auch besser wäre es, einen Ereignis-Listener dynamisch an den Anker-Link anzuhängen)

+0

Naja, vielleicht ist es nur kein Gesetzbuch. Ich habe eine Funktion programmiert, die das tatsächlich für mich tut. Vielen Dank!:) – Lazlo

1

Versuchen Sie dies:

<a href="#" onclick="foo(); return false;">Cube</a> 

in Ihrem JavaScript-Code: "Was ist das Problem mit dem Code"

function foo() { 
    document['example'].src = 'cube.png'; 
    document.getElementById('constructor').innerHTML = 'Mesh mesh = new Mesh.Cube(); 
} 
+0

Sie müssten auch Ihr CSS so anpassen, dass das Element wie eine Verknüpfung aussieht: style = "color: blue; text-decoration: unterstrichen; cursor: pointer; cursor: hand;" – jmort253

+0

@jmort Das ist nicht verwandt. Allerdings Text-Dekoration: unterstreichen, nicht unterstrichen. Außerdem setzen Sie die Cursor-Eigenschaft zweimal, was nicht sinnvoll ist. –

+0

Der onclick ist wirklich nicht verwandt. Ich möchte, dass es ein Link ist, der eine Javascript-Aktion verursacht. Warum sollte ich ein Ereignis anhängen? Naja, ich habe es trotzdem repariert. – Lazlo

Verwandte Themen