我在函数中遇到这个小问题,通常如果在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);
}
答案 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
)。如果是这样,有多种方法可以解决。
<head>
向<script defer>
标记添加属性defer
将使DOM代码在加载DOM后运行
<script>
window.onload = function(){ /* ... */ }
。
window.onload
更兼容的一个(可以单独调用多个函数)
如果不是问题,请包含重现问题的最小代码。