开发者问题收集

javascript:在 onchange 函数中传递数组

2021-02-01
1241

我尝试在 onchange 函数中传递一个数组,但遇到了错误。

该函数位于 head 标签中,如下所示:

<script>
        function displayReference(rA) {
            var rsb = document.getElementById("refSelectBox");
            var id = rsb.value;
            dr = document.getElementById("display-ref");
            dr.innerHTML = '</br>' + rA[id];
            return true;
        }
    </script>

其中 rA 应该是一个数组。 我尝试了两种不同的方法通过 onchange 发送 rA 数组:

<select class="selectResults" id="refSelectBox" onchange=displayReference(this.refArray)>

(产生“TypeError:undefined 不是对象(评估‘rA[id]’)”)

2.

<select class="selectResults" id="refSelectBox" onchange=displayReference(refArray)>

(产生“ReferenceError:找不到变量:refArray”)。

通过生成选择框代码之前的 console.log(refArray),我知道 refArray 存在并且已填充。

如果它有助于提供答案,这一切都在 MS Word 插件的环境中。

提前感谢任何帮助。

2个回答

我建议这样做 - 它将测试是否存在 refArray 并将选择传递给函数。

function displayReference(rsb) {
  if (refArray && refArray.length>0) {
    var id = rsb.value;
    var dr = document.getElementById("display-ref");
    dr.innerHTML = '</br>' + refArray[id];
  }
}

然后使用

<select class="selectResults" id="refSelectBox" onchange="displayReference(this)">
mplungjan
2021-02-01

由于您没有提供定义 refArray 的位置,我认为问题可能是它的顺序:

  • 确保在 select 标签之前 定义 refArray
<script>
    var refArray = ["Value One", "Value Two"]
</script>

<select class="selectResults" id="refSelectBox" onchange=displayReference(refArray)>
    <option>0</option>
    <option>1</option>
</select>

<p id="display-ref"></p>

<script>
    function displayReference(rA) {
        var rsb = document.getElementById("refSelectBox");
        var id = rsb.value;
        dr = document.getElementById("display-ref");
        dr.innerHTML = rA[id];
        return true;
    }
</script>

如果这不可能,您可以使用 字符串获取下面定义的数组 (在您的 js 中)来简化您的解决方案。您可以将此字符串转换为变量。阅读 此处 了解更多信息。

<select class="selectResults" id="refSelectBox" onchange="displayReference('refArray')">
  <option>0</option>
  <option>1</option>
</select>

<p id="display-ref"></p>

<script>
  var refArray = ["Value One", "Value Two"]

  function displayReference(rA) {
    var rsb = document.getElementById("refSelectBox");
    var id = rsb.value;
    dr = document.getElementById("display-ref");
    dr.innerHTML = window[rA][id];
    return true;
  }
</script>
Lars Flieger
2021-02-01