Javascript交换值

Javascript交换值,javascript,arrays,function,matrix,swap,Javascript,Arrays,Function,Matrix,Swap,我需要能够通过一个随机的3 x 3矩阵,检查数字是否有序(即,第一行是1-3,中间是4-6,底部是7-9)。到目前为止,我用JS编写了这个函数: function winningorder(topleft, topcenter, topright, centerleft, centercenter, centerright, bottomleft, bottomcenter, bottomright){ if(document.getElementById(topleft).innerHTML

我需要能够通过一个随机的3 x 3矩阵,检查数字是否有序(即,第一行是1-3,中间是4-6,底部是7-9)。到目前为止,我用JS编写了这个函数:

function winningorder(topleft, topcenter, topright, centerleft, centercenter, centerright, bottomleft, bottomcenter, bottomright){
if(document.getElementById(topleft).innerHTML = 1 && document.getElementById(topcenter).innerHTML = 2 && document.getElementById(topright).innerHTML = 3 && document.getElementById(centerleft).innerHTML = 4 && document.getElementById(centercenter).innerHTML = 5 && document.getElementById(centerright).innerHTML = 6 &&document.getElementById(bottomleft).innerHTML = 7 && document.getElementById(bottomcenter).innerHTML = 8 && document.getElementById(bottomright).innerHTML = 9){
    setTimeout(function(){ alert("Well Done!"); }, 250);
}   
我不知道是否需要将所有位置(每个单元格的HTML id)作为参数,所以这是我的第一个问题。第二,在HTML代码中,我将把函数放在哪里。代码是:

<table border=1>
<tr class="numberrow">
    <td id="topleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)" ></td>
    <td id="topcenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="topright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>
<tr class="numberrow">
    <td id="centerleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="centercenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="centerright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>
<tr class="numberrow">
    <td id="bottomleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="bottomcenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="bottomright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>

我的第一个想法是使用onchange事件并运行函数,但这不起作用。谢谢你的帮助

我不知道是否需要将所有位置(每个单元格的HTML id)作为参数

不,你不必。在回调函数(processclick)中,您将收到带有触发特定事件(
event.target
)的元素的事件对象

第二,在HTML代码中,我将把函数放在哪里。代码是:

<table border=1>
<tr class="numberrow">
    <td id="topleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)" ></td>
    <td id="topcenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="topright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>
<tr class="numberrow">
    <td id="centerleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="centercenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="centerright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>
<tr class="numberrow">
    <td id="bottomleft" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="bottomcenter" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
    <td id="bottomright" class="numbertile" onclick="processclick(this.id)" onchange=="winningorder(id)"></td>
</tr>
很难说您想要实现什么,所以这个答案可能会被编辑,但我的猜测是您正在服务器上呈现网格,并在javascript中尝试验证它是否有效。如果是这样,最简单的方法就是将javascript代码放在html表代码之后

完整示例(与性能相比,我更喜欢代码可读性):


.号码{
身高:5公分;
宽度:5em;
}
1.
2.
3.
4.
5.
6.
7.
8.
9
函数winningorder(){
//[id,innerHTML]
var winningMap={
左上角:1,
topcenter:2,
右上角:3,
中间偏左:4,
中心:5,
右:6,
左下角:7,
底部中心:8,
右下角:9
};
var tilesEl=document.getElementsByClassName('numbertile');
var isDone=Array.prototype.slice.call(
tilesEl,0
).每个(功能(el){
//every()方法测试数组中的所有元素是否都通过
//由提供的函数实现的测试。
返回winningMap[el.id]==Number(el.innerHTML);
});
中频(isDone){
setTimeout(函数(){alert(“干得好!”);},250);
}否则{
setTimeout(函数(){alert(“重试!”);},250);
}
}
winningorder();

document.getElementById(tileId)
放入全局变量中,并在
else
块中使用该变量。由于单击的单元格似乎已经是全局单元格,而不是将内部HTML存储在clickedcell中,为简单起见,请存储该元素(您的if将是
if(!clickedcell)
)-其余的应该自己写,但如果我试图更改单元格的内部(单元格中的数字),我不需要将该数字存储在某个地方吗?或者我该如何准确地编写代码,我仍然在研究我遇到的全新问题,解决了我的旧问题,如果有任何帮助,我将不胜感激@JaromandaX@Barmar你也是