1

我正在尝试禁用动态创建的下拉菜单选项(取决于用户与其他菜单选项的交互)并且我遇到了一个错误,指出“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");
4

3 回答 3

4
document.getElementById(DropDownNames[j]+x).value = openerVals

需要是

document.getElementById(DropDownNames[j]+x).value == openerVals

一个单一的=东西将设置等于另一个东西(并返回设置值)。既然你使用了这个,那就意味着if语句使用的结果是设置值的真实性。

==用于评估两个事物是否相等,类型强制。(2 ==“2”为真)

===用于评估两个事物是否相等,没有类型强制。(2 !==“2”为真)

于 2013-03-21T15:52:39.530 回答
1

该 if 语句应该使用==而不是=. 在下一行中,您不需要在 id 周围加上引号。它已经是一个字符串。

得到错误的原因是你应该有

for (var j = 0; j < DropDownNames.length; j++){

如果您使用<=,您将尝试访问不存在的数组元素 (DropDownNames[10]),因此document.getElementById不会返回任何内容。很可能也是这种情况x

于 2013-03-21T15:56:51.633 回答
0

您的 if 语句使用赋值 (=) 而不是比较 (==)

有些人甚至会说在 javascript 中使用 === 进行比较

于 2013-03-21T15:54:51.287 回答