代码之家  ›  专栏  ›  技术社区  ›  Zach Smith

使用JavaScript将数组中的多个项设置为禁用

  •  -1
  • Zach Smith  · 技术社区  · 7 年前

    当前将多个输入设置为 disabled 对我来说是可行的,但由于有多个for循环,代码似乎太多了:

    var textEditors = document.getElementsByClassName('textEditor'),
            textareas = document.getElementsByTagName('textarea'),
            radioInputs = document.getElementsByClassName('radioSelect'),
            textInputs = document.getElementsByTagName('input');
    
        for (var i = 0; i < textEditors.length; i++) {
            textEditors[i].disabled = true;
        }
        for (var g = 0; g < textInputs.length; g++) {
            textInputs[g].disabled = true;
        }
        for (var f = 0; f < textareas.length; f++) {
            textareas[f].disabled = true;
        }
        for (var z = 0; z < radioInputs.length; z++) {
            radioInputs[z].disabled = true;
        }
    

    但是上面这个对我来说很好。下面是我假设的工作原理-将所有元素放入一个数组中,并在单个数组上迭代以将每个元素设置为 残废 . 当我通过查看HTMLCollection时 console.log 上面说 disabled:true 但是屏幕上的元素并没有被禁用。我错过了什么?

    var textEditors = document.getElementsByClassName('textEditor'),
            textareas = document.getElementsByTagName('textarea'),
            radioInputs = document.getElementsByClassName('radioSelect'),
            textInputs = document.getElementsByTagName('input');
    
        var normalInputs = [];
        normalInputs.push(textEditors);
        normalInputs.push(textInputs);
        normalInputs.push(radioInputs);
        normalInputs.push(textareas);
    
        for (var i = 0; i < normalInputs.length; i++) {
            console.log(normalInputs[i])
            normalInputs[i].disabled = true;
        }
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Code Maniac    7 年前

    这将符合你的目的。

    在第二种方法中,您将从 getElement 进入 normalInputs 数组和,然后循环通过该数组并对的元素应用disable属性 inputArray 它最终是所有 selected elements 不 individual element .

    var textEditors = document.getElementsByClassName('textEditor'),
        textareas = document.getElementsByTagName('textarea'),
        radioInputs = document.getElementsByClassName('radioSelect'),
        textInputs = document.getElementsByTagName('input');
    
    var normalInputs = [];
    normalInputs.push(textEditors);
    normalInputs.push(textInputs);
    normalInputs.push(radioInputs);
    normalInputs.push(textareas);
    
    normalInputs.forEach(e=>{
      e.forEach(ele =>{
        ele.disabled = true;
      })
    })
    

    for (var i = 0; i < normalInputs.length; i++) {
          for(let j=0; j< normalInputs[i].length; j++){
          normalInputs[i][j].disabled = true;
         }
      }
    

    更好的方法是使用 concat

    var normalInputs = [];
        normalInputs = normalInputs.concat(textEditors,textInputs,radioInputs, textareas);
    
    for(let i=0; i<normalInputs.length; i++){
      normalInputs[i].disabled = true;
    }
    
        2
  •  -1
  •   mrReiha    7 年前

    好吧,给他们上同样的课 .inputs 并用一个表达式获得所有这些表达式:

    var items = document.querySelectorAll( '.inputs' );
    

    如果不可能,请按以下方式获取所有这些:

    var items = document.querySelectorAll( 'input, .textEditor, .radioSelect, textarea' );
    

    然后,您可以通过一个循环来解决所有问题:

    for ( var i = 0; i < items.length; i++ )
        items[ i ].disabled = true;