2017-05-10 1 views
1

Ich habe zwei HTML-Seiten und eine JS-Datei, die die Logik für beide ausführt. Wenn ich versuche, ein Bild dynamisch in einer meiner HTML-Dateien mit var mainImage = document.getElementById("lastImageID"); zu ändern, funktioniert das, aber wenn ich versuche, das gleiche für die andere HTML-Datei zu tun, tut es nicht (ich erhalte null als Ergebnis).Zugriff auf 2 verschiedene HTML-Dateien aus 1 JS-Datei?

Ich habe "<script type="text/javascript" src="controller.js"></script>" die JS-Datei in beiden HTML-Dateien "enthalten".
Ich habe auch versucht, hier in Stack Overflow Informationen zu finden, wie man auf ein Element in einer HTML-Datei anders als mit der Notation document zugreifen kann, aber das scheint der einzig richtige Weg zu sein.
Ich habe auch überprüft und es gibt keine identischen IDs in beiden Dateien.

erster HTML-Datei (entsprechender Code):

<div class="thumbnail"> 
    <img id="mainImageId" src="img/decision.jpg" 
     alt="Decision"> 
</div> 
<div class="textMessage"> 
    <div id="messageToUserID" class="infoText"> 
    <h5>some text</h5> 
    </div> 
</div> 

zweite HTML-Datei (entsprechender Code):

<div class="thumbnail"> 
    <img id="lastImageID" 
     src="img/congratulations.jpg" 
     alt="Decision"> 
</div> 
<div class="textMessage"> 
    <div id="lastMessageToUserID" class="infoText"> 
    <h5>some text</h5> 
</div> 

JavaScript-Code:

// A function, which receives an new image, and updates the main image of the simulation by it. 
function updateImageInLastScreen(newImage){ 
    var mainImage = document.getElementById("mainImageId"); 
    mainImage.src = newImage; 
    var lastImage = document.getElementById("lastImageID"); 
    lastImage.src = newImage; 
} 


// A function, which receives an new message, and updates the main message of the simulation by it. 
function updateMessageInLastScreen(newMessageToUser){ 
    var mainMessageToUser = document.getElementById("messageToUserID"); 
    messageToUserID.innerHTML = newMessageToUser; 
    var lastMessageToUser = document.getElementById("lastMessageToUserID"); 
    lastMessageToUser.innerHTML = newMessageToUser; 
} 

Der Zugriff auf die Elemente in der ersten Datei arbeiten, aber zu denen in der zweiten Datei nicht ...

Here are 4 small files I am working with

+0

Hallo @Tay Yang Shun, danke für die Antwort! Die Antwort auf Ihre Frage ist negativ, und das habe ich mit "Ich habe auch überprüft und die IDs der Elemente sind nicht identisch" gemeint. – Felix

+1

Es würde helfen, wenn Sie die relevanten Bits der zwei HTML-Dateien sowie die JS-Datei zu Ihrer Frage hinzugefügt haben. –

+0

Hallo @TayYangShun, getan für Ihre Anfrage. 10x! – Felix

Antwort

0

Try if prüft das Hinzufügen vor den Inhalt zu manipulieren:

// A function, which receives an new image, and updates the main image of the simulation by it. 
 
function updateImageInLastScreen(newImage){ 
 
    var mainImage = document.getElementById("mainImageId"); 
 
    if (mainImage) { 
 
     mainImage.src = newImage; 
 
    } 
 
    var lastImage = document.getElementById("lastImageID"); 
 
    if (lastImage) { 
 
     lastImage.src = newImage; 
 
    } 
 
} 
 

 

 
// A function, which receives an new message, and updates the main message of the simulation by it. 
 
function updateMessageInLastScreen(newMessageToUser){ 
 
    var mainMessageToUser = document.getElementById("messageToUserID"); 
 
    if (mainMessageToUser) { 
 
     messageToUserID.innerHTML = newMessageToUser; 
 
    } 
 
    var lastMessageToUser = document.getElementById("lastMessageToUserID"); 
 
    if (lastMessageToUser) { 
 
     lastMessageToUser.innerHTML = newMessageToUser; 
 
    } 
 
}

+0

danke für Ihren Kommentar! Im Allgemeinen hast du recht. Dies wäre eine gute Übung, und ich sollte dies dem Code hinzufügen, unabhängig von meinem Problem, aber mein Problem ist genau die Tatsache, dass die Zeilen vor den 'if' Anweisungen (die Sie vorschlagen) Nullen zurückgeben. Das sollten sie nicht, und genau das versuche ich zu verstehen! – Felix

+0

Ich glaube, Sie haben ein Missverständnis darüber, wie der Browser auf HTML und JS funktioniert. Der Browser gibt nur jeweils eine HTML-Seite innerhalb eines Fensters/Tabs wieder, und der Inhalt des anderen HTML existiert nicht im DOM. –

+0

vielen Dank! Ich denke, das ist genau die Antwort! Ich bin nicht neu in der Programmierung, aber neu in HTML/JS/CSS, und das habe ich gar nicht erkannt. Okay, dann, nach dem Verständnis des Problems, wie würden Sie vorschlagen, sich dem Thema zu nähern? Ich muss den Inhalt von "lastPage.html" dynamisch erzeugen, basierend auf dem Zustand meiner Simulation: Wenn der Zustand A ist, dann sollten das Bild und die Nachricht in diesen Zustand passen, wenn der Zustand B ist, dann das Bild und die Nachricht Sollte dieser Zustand passen usw. Danke! – Felix

0

Also ... nicht ich sehr gut verstehen. Sag mir, ob meine Erklärung deinem Problem entspricht.

I page1.html

<h1>Image 1</h1> 
<img src="" alt="image one" style="width:304px;height:228px;" id="image1"> 
<script src="myfile.js" type="text/javascript"></script> 

Dann erstellt haben, ich page2.html

<h1>Image 2</h1> 
<img src="" alt="image two" style="width:304px;height:228px;" id="image2"> 
<script src="myfile.js" type="text/javascript"></script> 

In myfile.js erstellt haben, habe ich das ein Stück Bild

var image1 = document.getElementById('image1'); 
var image2 = document.getElementById('image2'); 

if(image1) image1.src = 'image.jpg'; 

if(image2) image2.src = 'image.jpg'; 

Diese Weg ist dein Problem? Hier funktioniert dieser Weg beide Bilder.

+0

Hallo @joelton, danke für deine Antwort. Ich glaube, Sie verstehen meinen Code, aber mein Problem ist, dass ich aus irgendeinem Grund nicht auf die zweite Datei zugreifen kann, die ich brauche (ich habe den Rest nur implementiert, um mich selbst zu überprüfen). Das Übersetzen meines Problems zu Ihrem Code würde sein, dass die Zeile 'var image2 = document.getElementById ('image2');' aus irgendeinem Grund null zurückgibt, was für mich unklar ist ... – Felix

+0

@Felix der Fluss hat aufgehört, weil Sie muss hinzugefügt werden, wenn überprüft wird. Wenn Sie in der zweiten Datei sind, erscheint im Konsolenbildschirm ein Fehler? like 'Kann die Eigenschaft' src 'von null' nicht setzen? Ich denke, wenn Sie Kontrolle hinzufügen, funktioniert der Fluss. – joelton

+0

Vielen Dank für Ihren Kommentar. Sie haben Recht bei Ihrer Beobachtung, aber mein Problem ist nicht die Erkennung, warum der Code nicht weiter läuft, sondern warum die obigen Zeilen ('var lastImage = document.getElementById ('lastImageID');' und 'var lastMessageToUser = document. getElementById ("lastMessageToUserID"); ') gibt Nullen zurück. Vielen Dank. – Felix

0

, wenn Sie die gleiche Funktion updateImageInLastScreen() für die zweite html nennen diese Linie var mainImage = document.getElementById("mainImageId"); erhält den Wert als null (seit ‚mainImageId‘ nicht, dass es in der zweiten html ist) und die zweite Anweisung, nachdem es mainImage.src = newImage; eine Ausnahme auslöst sagen

TypeError: Cannot set property 'src' of null at updateImageInLastScreen

und stoppt die weitere Ausführung. Sie können das gleiche in F12-Konsole überprüfen.

Aber wenn Sie es von der ersten html aufrufen, dann wirft es auch eine Ausnahme für lastImage.src = newImage;, aber da es nach der kommt es wird aktualisiert.

Gemäß Ihrem Code ist es offensichtlich, dass eines der Elemente null ist, da es aus einer einzelnen HTML-Datei aufgerufen wird. Und Sie suchen blind nach der Verfügbarkeit des zweiten Elements.

Sie können dies beheben, indem Sie den Code in einem try..catch Block als

function updateImageInLastScreen(newImage){ 
    try{ 
     var mainImage = document.getElementById("mainImageId"); 
     mainImage.src = newImage; 
    } 
    catch(e){ 
     console.log(e); 
    } 

    try{ 
     var lastImage = document.getElementById("lastImageID"); 
     lastImage.src = newImage; 
    } 
    catch(e){ 
     console.log(e); 
    } 
} 

setzen Sie es, hier zu arbeiten https://jsfiddle.net/hk30k20t/1/ finden

Verwandte Themen