我正在尝试禁用动态创建的下拉菜单选项(取决于用户与其他菜单选项的交互),我遇到错误,指出“null”不是对象。
在这行代码上:
if (document.getElementById(DropDownNames[j]+x).value = openerVals) {
我相信我有一个语法错误,但我仍然是Javascript的新手,并不完全确定。
以下是整个代码:
var OpeningEmployees = document.getElementById('opener');
var QuantityDDOptions = ('#opener option').length;
var openerVals = eodForm.elements["opener"].value;
var DropDownNames = new Array();
DropDownNames[0] = "ui-multiselect-opener-option-";
DropDownNames[1] = "ui-multiselect-mid-option-";
DropDownNames[2] = "ui-multiselect-closer-option-";
DropDownNames[3] = "ui-multiselect-SR-option-";
DropDownNames[4] = "ui-multiselect-CR-option-";
DropDownNames[5] = "ui-multiselect-A-option-";
DropDownNames[6] = "ui-multiselect-BD-option-";
DropDownNames[7] = "ui-multiselect-Fridge-option-";
DropDownNames[8] = "ui-multiselect-AO-option-";
DropDownNames[9] = "ui-multiselect-EPV-option-";
OpeningEmployees.onchange = function () {
for (var j = 0; j <= DropDownNames.length; j++){
for (var x = 0; x <= QuantityDDOptions; x++) {
if (document.getElementById(DropDownNames[j]+x).value = openerVals) {
document.getElementById("'"+DropDownNames[j]+x+"'").setAttribute("disabled","disabled");
谢谢大家的帮助。我已经从您的帖子进行了更改,但仍然在浏览器控制台中收到错误。请注意,下拉名称末尾的数字是动态的。当用户添加到数据库时,它们会被添加到下拉菜单中,这就是我将QuantityDDOptions设置为等于选项数量的原因。选项从0开始。
以下是更新的代码:
var OpeningEmployees = document.getElementById('opener');
var QuantityDDOptions = ('#opener option').length;
var openerVals = eodForm.elements["opener"].value;
var DropDownNames = new Array();
DropDownNames[0] = "ui-multiselect-opener-option-";
DropDownNames[1] = "ui-multiselect-mid-option-";
DropDownNames[2] = "ui-multiselect-closer-option-";
DropDownNames[3] = "ui-multiselect-SR-option-";
DropDownNames[4] = "ui-multiselect-CR-option-";
DropDownNames[5] = "ui-multiselect-A-option-";
DropDownNames[6] = "ui-multiselect-BD-option-";
DropDownNames[7] = "ui-multiselect-Fridge-option-";
DropDownNames[8] = "ui-multiselect-AO-option-";
DropDownNames[9] = "ui-multiselect-EPV-option-";
OpeningEmployees.onchange = function () {
for (var j = 0; j < DropDownNames.length; j++){
for (var x = 0; x < QuantityDDOptions; x++) {
if (document.getElementById(DropDownNames[j]+x).value == openerVals) {
document.getElementById(DropDownNames[j]+x).setAttribute("disabled","disabled");
答案 0 :(得分:4)
document.getElementById(DropDownNames[j]+x).value = openerVals
需要
document.getElementById(DropDownNames[j]+x).value == openerVals
单个=
将设置与其他东西相等的东西(并返回设定值)。因为你使用它,这意味着if
语句使用的结果是设定值的真实性。
==
用于评估两个事物是否相等,具有类型强制。 (2 ==
“2”为真)
===
用于评估两个事物是否相等,没有类型强制。 (2 !==
“2”为真)
答案 1 :(得分:1)
if语句应该使用==
而不是=
。在下一行中,您不需要在id周围加上引号。它已经是一个字符串了。
获得错误的原因是你应该
for (var j = 0; j < DropDownNames.length; j++){
如果您使用<=
,您将尝试访问不存在的数组元素(DropDownNames [10]),因此document.getElementById
不会返回任何内容。 x
也很可能就是这种情况。
答案 2 :(得分:0)
您的if语句使用赋值(=)而不是比较(==)
有些人甚至会说使用===进行javascript中的比较