Javascript:调用函数onsubmit不会截获参数

Javascript:调用函数onsubmit不会截获参数,javascript,arrays,Javascript,Arrays,我正在尝试用香草JS制作一个蛇类游戏,其中有可能会改变关卡。每个级别由一个函数生成的不同迷宫表示: function createMaze(selected) { for (let y = 0; y < selected.length; y++) { for (let x = 0; x < selected[y].length; x++) { if (selected[y][x] === 1) { ctx.fillStyle = "black"

我正在尝试用香草JS制作一个蛇类游戏,其中有可能会改变关卡。每个级别由一个函数生成的不同迷宫表示:

function createMaze(selected) {
  for (let y = 0; y < selected.length; y++) {
    for (let x = 0; x < selected[y].length; x++) {
      if (selected[y][x] === 1) {
        ctx.fillStyle = "black";
        ctx.fillRect(x*10, y*10, 10, 10);
      }
    }
  }
}
然后在事件侦听器中调用:

levelSelection.addEventListener("submit", (event) => {
  event.preventDefault();
  selected = levelDropdown.options[levelDropdown.selectedIndex].value;
  createMaze(selected);
  console.log(selected);
});
由于没有执行任何选择,createMaze函数在开始时没有特定参数,因此我包含了一个子句:

if (!selected) selected = gridLevel1;
当游戏开始时,createMaze(selected)函数被调用


但是,即使在事件侦听器中,当调用函数createMaze(selected)时,我能够注销作为级别名称的值(也就是表示每个级别的数组名称),它似乎也不起作用。如果我在creatMaze中记录所选的,它只打印出数组的名称,而不是数组本身。

因为所选的
是一个字符串,例如
“gridLevel1”
,但您希望它是一个变量
gridLevel1
。这可以通过在窗口对象中查找来轻松完成:

 window["gridLevel1"] // gridLevel1
或者在一般情况下:

createMaze(window[selected]);

但是,尽管这是可行的,但是你应该考虑把层次放进一个对象:

const levels = {
  gridLevel1: [ /*..*/ ],
  //...
 };
因此,您可以:

createMaze(levels[selected])

因为所选的
是一个字符串,例如
“gridLevel1”
,但您希望它是一个变量
gridLevel1
。这可以通过在窗口对象中查找来轻松完成:

 window["gridLevel1"] // gridLevel1
或者在一般情况下:

createMaze(window[selected]);

但是,尽管这是可行的,但是你应该考虑把层次放进一个对象:

const levels = {
  gridLevel1: [ /*..*/ ],
  //...
 };
因此,您可以:

createMaze(levels[selected])

如果您实际上没有尝试重定向/发帖,我不会使用表单。据我所知,您正在将
字符串值
传递给
createMaze函数
,但它需要一个
数组
@fayed,Indeed-有关于如何传递此参数的提示吗?@llievredemars检查下面的答案他总结了解决方案非常多如果你实际上没有尝试重定向/发帖,我了解的是你正在将
字符串值
传递给
createMaze函数
,但它需要一个
Array
@fayeed,indeed-关于如何传递此参数有什么提示吗?@llievredemars检查下面的答案他总结了很多解决方案