2016-06-18 4 views
0

den folgenden Code anzeigen:‚für‘ für Array verwendet Schleife nicht in diesem einfachen Skript arbeitet

function overall() { 
var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"]; 
function forward() { 
    var A = document.getElementById('text'); 
    for (var i = 0; i < message.length+1; i++) { 
     if (A.innerHTML===message[i]) { 
      A.innerHTML = message[i+1]; 
     }; 
    }; 
}; 
function backward() { 
    var A = document.getElementById('text'); 
    for (var i = 0; i < message.length+1; i++) { 
     if (A.innerHTML===message[i]) { 
      A.innerHTML = message[i-1]; 
     }; 
    }; 
}; 
}; 

In dem oben JS-Skript, ist meine Absicht, wenn die Vorwärts() Funktion aufgerufen wird, Tier in dem ' .innerHTML 'sollte sich danach im Array' message 'mit der for-Schleife zu einem Tier ändern. Wenn die backward() -Funktion aufgerufen wird, sollte Tier in der '.innerHTML' in ähnlicher Weise zu einem Tier vor diesem in der genannten Array ändern.

Ich verifizierte mein Skript und es gibt angeblich keine syntaktischen Fehler. Das bedeutet, dass es einen Fehler in meiner Logik gibt. Bitte hilf mir. Vielen Dank!

Die HTML:

<html> 
<head></head> 
<body> 
    <p id="text">dog</p> 
    <div id='right' onclick="forward()"></div> 
    <div id="left" onclick="backward()"></div> 
</body> 
</html> 
+1

'message.length + 1' bewirkt, dass die Schleife über das Ende des Arrays hinausläuft. Du hast wahrscheinlich "message.length-1" gemeint. –

+0

Bitte fügen Sie den HTML-Code dieses Elements und den Code hinzu, den Sie eigentlich "forward" und "backward" nennen. – trincot

+0

Wie rufen Sie Ihre Funktion in Ihrem HTML auf? Ich meine, die beiden Funktionen sind in einer Gesamtfunktion enthalten. –

Antwort

0

Diese Hilfe Sie:

<html> 
 
<head> 
 
    <style> 
 
    </style> 
 
</head> 
 
    <body> 
 
     <p id="text">cat</p> 
 
     <button id="btn1" onclick="forward()">Next</button> 
 
     <button id="btn2" onclick="backward()">previous</button> 
 
     <script> 
 
        var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"]; 
 
        function forward() { 
 
         var A = document.getElementById('text'); 
 
         for (var i = 0; i < message.length-1; i++) { 
 
          if (A.innerHTML === message[i]) { 
 
           A.innerHTML = message[i+1]; 
 
           break; 
 
          } 
 
         } 
 
        } 
 
        function backward() { 
 
         var A = document.getElementById('text'); 
 
         for (var i = message.length-1; i > 0; i--) { 
 
          if (A.innerHTML===message[i]) { 
 
           A.innerHTML = message[i-1]; 
 
           break; 
 
          } 
 
         } 
 
        } 
 
     </script> 
 
    </body> 
 
</html>

+0

Es funktionierte so, wie ich es wollte. Vielen Dank! –

0

Sie werden nie weder backward noch forward nennen können, da sie in einer anderen Funktion eingewickelt werden (overall) und Sie kehren sie in keiner Weise. Sie sind privat. Sie rufen sie nicht einmal in der overall Funktion so, was Sie haben hier gezeigt, ist im Grunde ein toter Code :)

Als Randbemerkung: Warum setzen Sie Semikolon ; nach for, if und function Aussagen ???

+0

Großartig, danke! Außerdem habe ich die Semikolons nur zur persönlichen Zufriedenheit verwendet; dass ihre Handlungen beendet sind. Beeinflusst es das Skript als Ganzes? –

0

Vielleicht möchten Sie tun dies

var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"]; 
 
function forward() { 
 
    var A = document.getElementById('text'); 
 
    for (var i = 0; i < message.length; i++) { 
 
     if (A.innerHTML===message[i]) { 
 
      break; 
 
     } 
 
    } 
 
    if(i+1 == message.length) return false; 
 
    A.innerHTML = message[i+1]; 
 
}; 
 
function backward() { 
 
    var A = document.getElementById('text'); 
 
    for (var i = 0; i < message.length; i++) { 
 
     if (A.innerHTML===message[i]) { 
 
     \t break; 
 
     } 
 
    } 
 
    if(i == 0) return false; 
 
    A.innerHTML = message[i-1]; 
 
};
<p id="text">dog</p> 
 
    <button id='right' onclick="forward()">right</button> 
 
    <button id="left" onclick="backward()">left</button>

0

Sie haben die Schleife zu stoppen, wenn Sie den Knoten ändern.

Zum Beispiel ist der ursprüngliche Text tiger. Sie rufen forward(). Die Schleife startet, und für i=4 geht es in das if, ändert den Text in #text zu eagle. Nächste Iteration i=5, eagle === eagle, setzen Sie John Doe etc ...

Alles, was Sie tun müssen, ist die Schleife nach der ersten Änderung zu stoppen:

if (A.innerHTML===message[i]) { 
    A.innerHTML = message[i+1]; 
    break; 
} 
0

Sie brechen sollte verwendet, wenn Sie einen passenden Hit Text.

var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"]; 
function forward() { 

     var A = document.getElementById('text'); 
     for (var i = 0; i < message.length-1; i++) { 
      if (A.innerHTML===message[i]) { 
       A.innerHTML = message[i+1]; 
       break; 
      } 
     } 

} 
function backward() { 

     var A = document.getElementById('text'); 
     for (var i = 0; i < message.length-1; i++) { 
     if (A.innerHTML===message[i]) { 
     A.innerHTML = message[i-1]; 
     break; 
    } 
} 

    } 

hier ist der Plunker https://plnkr.co/edit/rcCIEUejlxog2RkqHkwa?p=preview

nun nach hinten und nach vorne rufen, wie Sie mögen. Aber Sie müssen auch nach der ersten und letzten Position suchen, da Sie eine Rückwärtsfunktion mit Hund aufgerufen haben, da der Text in Element A dazu führt, dass der Text nicht definiert ist. Wenn Sie möchten, dass der Text sich dreht, dann kann das auch gehandhabt werden.

-2

function overall() { 
 
var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"]; 
 
function forward() { 
 
    var A = document.getElementById('text'); 
 
    for (var i = 0; i < message.length; i++) { 
 
     if (A.innerHTML===message[i] && i < message.length-1) { 
 
      A.innerHTML = message[i+1]; 
 
     }; 
 
    }; 
 
}; 
 
function backward() { 
 
    var A = document.getElementById('text'); 
 
    for (var i = 0; i < message.length; i++) { 
 
     if (A.innerHTML === message[i] && i > 0) { 
 
      A.innerHTML = message[i-1]; 
 
     }; 
 
    }; 
 
}; 
 
};

+0

Sie sollten erläutern, was Sie im Code-Snippet geändert haben. Reine Code-Antworten werden abgeraten. –

+0

Array-Index von Null und array.length beginnen von eins und die Schleife sollte i damodar

0

Nun, ich würde mit einem einzigen Rückruf sowohl für die Vorwärts-anwendbar diesen Job und Rückwärtstasten (divs hier)

var message = ["dog", "cat", "bear", "penguin", "tiger", "eagle", "John Doe"], 
 
     pel = document.getElementById("text"), 
 
     idx = 0, 
 
    getNext = e => pel.innerText = e.target.id == "right" ? message[idx = ++idx%message.length] 
 
                  : message[idx = (message.length - (message.length - --idx)%message.length)%message.length]; 
 
document.getElementById("right").onclick = getNext; 
 
document.getElementById("left").onclick = getNext;
<!DOCTYPE html> 
 
<html> 
 

 
    <head> 
 
    <link rel="stylesheet" href="style.css"> 
 
    <script src="script.js" defer ></script> 
 
    </head> 
 

 
    <body> 
 
    <p id="text">dog</p> 
 
    <div id="right" style = "background-color:tomato" onclick="getNext">Forward</div> 
 
    <div id="left" style = "background-color:thistle" onclick="getNext">Backward</div> 
 
    </body> 
 

 
</html>

Allerdings kann ich nicht sicher, ob dies der beste Weg ist, Reverse-Modul auf Array-Indizes zu erhalten, wenn nach hinten gedrückt. Ich würde mich über Hinweise zu einem besseren Ansatz freuen.

Übrigens, ich weiß, dass Pfeile mit IE und Safari nicht OK sind, aber man sie leicht durch ihre konventionellen Gegenstücke ersetzen kann.

Verwandte Themen