如何在条件语句中使用动态创建的JavaScript对象?

时间:2017-08-21 01:31:57

标签: javascript

我在函数中遇到这个小问题,通常如果在DOM中未定义变量“receivedRDB”,则在表单中动态创建它,如果定义了它,则取另一个变量“receivedR”的值。但是“receivedRDB”一直在创建,即使已经在DOM中定义了它。

var receivedRDB = document.getElementsByName('receivedR')[0];
    if (typeof receivedRDB !== "undefined") {

        receivedR = JSON.parse(receivedRDB.value.split(",").slice(0));

    } else {

        receivedR = [];


    }
    if (typeof receivedRDB !== "undefined") { //never detected
        receivedR.push(toRemoveR);
        receivedRDB.value = JSON.stringify(receivedR).replace(/"\[\\|\\"]|\\"/g, "");
    } else { //problematic part
        event.preventDefault();
        receivedR.push(toRemoveR);
        var input = document.createElement("input");
        input.type = "hidden";
        input.name = "receivedR";
        input.value = JSON.stringify(receivedR);
        rForm.appendChild(input);
    }

2 个答案:

答案 0 :(得分:2)

这是一个基于getElementsByName是" live"列表

您可以在代码中随处放置

var receivedRDB = document.getElementsByName('receivedR');

然后将代码更改为

if (receivedRDB.length !== 0) {
    receivedR.push(toRemoveR);
    receivedRDB[0].value = JSON.stringify(receivedR).replace(/"\[\\|\\"]|\\"/g, "");
} else {
    event.preventDefault();
    receivedR.push(toRemoveR);
    var input = document.createElement("input");
    input.type = "hidden";
    input.name = "receivedR";
    input.value = JSON.stringify(receivedR);
    rForm.appendChild(input);
}

答案 1 :(得分:0)

我猜使用<script>的{​​{1}}标记早于DOM(例如receivedRDB)。如果是这样,有多种方法可以解决。

  1. <head>

    <script defer>标记添加属性defer将使DOM代码在加载DOM后运行

  2. <script>

    加载DOM后将调用

    window.onload = function(){ /* ... */ }

  3. window.onload

    更兼容的一个(可以单独调用多个函数)

  4. 如果不是问题,请包含重现问题的最小代码。