こんにちは私はJavascript8スライダーパズル(イベントリスナーを含めて機能しています)に取り組んでおり、パズルを解くための動きの配列(ユーザーがクリックする正方形/ div ID)を生成するコードを持っています。
私の目標は、ユーザーが解決ボタンをクリックして、パズル内の一連の解決策の動きを再生する関数をトリガーできるようにすることです。
私が本当に困惑しているのは、何らかの理由で、次のコードでは、クリックがループのすべての反復で機能するわけではありません-これはすべてを台無しにします。誰かが助けや提案を提供していただければ幸いです。
while(k < moves.length)
{
var move = "vp" + moves[k];
var el = document.getElementById(move);
el.click(); // simulate a users click on div
populate(); // update array
k++;
}
編集-以下に尋ねた人のために、イベント関数ともう少しコードがあります...
function addEvent(elem, event, fn) {
// avoid memory overhead of new anonymous functions for every event handler that's installed
// by using local functions
function listenHandler(e) {
var ret = fn.apply(this, arguments);
if (ret === false) {
e.stopPropagation();
e.preventDefault();
}
return(ret);
}
function attachHandler() {
// set the this pointer same as addEventListener when fn is called
// and make sure the event is passed to the fn also so that works the same too
var ret = fn.call(elem, window.event);
if (ret === false) {
window.event.returnValue = false;
window.event.cancelBubble = true;
}
return(ret);
}
if (elem.addEventListener) {
elem.addEventListener(event, listenHandler, false);
} else {
elem.attachEvent("on" + event, attachHandler);
}
}
window.onload = function() {
var height = (newImg.height*0.33);
var width = (newImg.width*0.33333);
addEvent(document.getElementById('shuffle'),'click',initGame);
addEvent(document.getElementById('vp1'),'click',move);
addEvent(document.getElementById('vp2'),'click',move);
addEvent(document.getElementById('vp3'),'click',move); // ...
これは、el.click();という関数の最初の部分です。呼び出し...
function move() {
var e = this;
var id = e.id.charAt(2);
var temp = 0;
//var images = e.getElementsByTagName('img');
//alert(images[0].className);
if (id == 1) {
if (document.getElementById("vp2").innerHTML.indexOf("selected") != -1)
{ temp = e.innerHTML;
e.innerHTML = document.getElementById("vp2").innerHTML;
document.getElementById("vp2").innerHTML = temp;
numMoves++;
}else if (document.getElementById("vp4").innerHTML.indexOf("selected") != -1)
{ temp = e.innerHTML;
e.innerHTML = document.getElementById("vp4").innerHTML;
document.getElementById("vp4").innerHTML = temp;
numMoves++;
}
}