Javascript JS数组适用于一个函数,但不适用于另一个函数

Javascript JS数组适用于一个函数,但不适用于另一个函数,javascript,html,Javascript,Html,我的JS功夫不存在,所以我来寻求帮助。我有一个form.php页面,其中有大约20个输入字段;但是,如果单击一个单选按钮,则需要禁用其中一半以上的输入字段。以下是我目前掌握的情况: <script type="text/javascript" charset="utf-8"> // create an array of all elementId's that need to be disabled/enabled based on whether radio butto

我的JS功夫不存在,所以我来寻求帮助。我有一个form.php页面,其中有大约20个输入字段;但是,如果单击一个单选按钮,则需要禁用其中一半以上的输入字段。以下是我目前掌握的情况:

  <script type="text/javascript" charset="utf-8">
    // create an array of all elementId's that need to be disabled/enabled based on whether radio button TR 280 or 284 is selected
    let fieldsAffected = [ 'f2Cct2Or4Wire2W', 'f2Cct2Or4Wire4W', 'f3Cct2Or4Wire2W', 'f3Cct2Or4Wire4W', 'f4Cct2Or4Wire2W', 'f4Cct2Or4Wire4W' ];

    function eqptTypeVal() { // FUNC to check the state of eqptType when page first loads and disabling/enabling required fields as necessary
      var rs = document.querySelector( 'input[ name = "eqptType" ]:checked' ).value;
      if ( rs == '280' ) {
        for ( let i = 0; i < fieldsAffected.length; i++ ) {
          document.getElementById( fieldsAffected[ i ] ).setAttribute( 'disabled', true );
        } // close FOR
      } else {
        for ( let i = 0; i < fieldsAffected.length; i++ ) {
          document.getElementById( fieldsAffected[ i ] ).removeAttibute( 'disabled' );
        } // close FOR
      } // close IF
    } // close FUNC eqptTypeVal
    window.onload = eqptTypeVal;

    $( document ).ready( function() { // FUNC to monitor 280 radio button and when clicked disable the elementIds in array fieldsAffected
      $( '#eqptType280' ).click( function() {
        for ( let i = 0; i < fieldsAffected.length; i++ ) {
          $( fieldsAffected[ i ] ).setAttribute( 'disabled', true );
        } // close FOR
        /*
        $( '#f2Cct2Or4Wire2W' ).attr( 'disabled', true );
        $( '#f2Cct2Or4Wire4W' ).attr( 'disabled', true );
        $( '#f3Cct2Or4Wire2W' ).attr( 'disabled', true );
        $( '#f3Cct2Or4Wire4W' ).attr( 'disabled', true );
        $( '#f4Cct2Or4Wire2W' ).attr( 'disabled', true );
        $( '#f4Cct2Or4Wire4W' ).attr( 'disabled', true );
         */
      });
    }); // close docReady FUNC

    $( document ).ready( function() { // FUNC to monitor 284 radio button and when clicked enable the elementIds in array fieldsAffected
      $( '#eqptType284' ).click( function() {
      for ( let i = 0; i < fieldsAffected.length; i++ ) {
        $( fieldsAffected[ i ] ).setAttribute( 'disabled', false );
      } // close FOR
      /*
        $( '#f2Cct2Or4Wire2W' ).attr( 'disabled', false );
        $( '#f2Cct2Or4Wire4W' ).attr( 'disabled', false );
        $( '#f3Cct2Or4Wire2W' ).attr( 'disabled', false );
        $( '#f3Cct2Or4Wire4W' ).attr( 'disabled', false );
        $( '#f4Cct2Or4Wire2W' ).attr( 'disabled', false );
        $( '#f4Cct2Or4Wire4W' ).attr( 'disabled', false );
       */
      });
    }); // close docReady FUNC
  </script>

//根据选择单选按钮TR 280还是284,创建需要禁用/启用的所有elementId的数组
让fieldsAffected=['f2Cct2Or4Wire2W'、'f2Cct2Or4Wire4W'、'f3Cct2Or4Wire2W'、'f3Cct2Or4Wire4W'、'f4Cct2Or4Wire2W'、'f4Cct2Or4Wire4W'];
函数eqptTypeVal(){//FUNC可在页面首次加载时检查eqptType的状态,并根据需要禁用/启用必填字段
var rs=document.querySelector('input[name=“eqptType”]:checked')。值;
如果(rs='280'){
for(设i=0;i
JS实际上可以根据需要使用下面两个JS函数中的注释掉的块,而不受fieldsAffected数组的影响。但是因为如果选择280单选按钮,我将有一个要禁用的ElementID的长列表,所以我想使用数组和循环来管理受影响ElementID的禁用启用

数组必须是好的,因为它在first JS函数中用于检查在页面首次加载时是否选择了280单选按钮(取决于mysql数据),从而禁用数组中的ElementID。但随后单击280或284按钮,在以下两个JS函数中使用相同的数组,当在初始页面加载后单击280或284单选按钮时,数组的ElementID不会发生任何变化

但是数组似乎不起作用的第二个和第三个函数必须是ok的,因为如果没有数组,并且所有的ElementID都一一列出,只要单击280或284单选按钮,输入字段就会禁用

但我真的对JS一无所知。有人能帮我指出在我将上面粘贴的数组和函数拼凑在一起时丢失的语言的一些可能的细微差别吗

<fieldset class="fieldsetToneRemote">
      <legend>Eqpt ID</legend>
      <div class="formRowDiv">
        <label>
          <span>Eqpt Type:</span>
          <input type="radio" id="eqptType280" name="eqptType"  value="280"
            <?php
            if ( $_SESSION[ 'eqptType' ] == "280" ) {
                echo ' checked';
              }
            ?>
          >
          <span class="radioLabel">280</span>
          <input type="radio" id="eqptType284" name="eqptType" value="284"
            <?php
            if ( empty( $_SESSION[ 'eqptType' ] ) || is_null( $_SESSION[ 'eqptType' ] ) ) {
              echo ' checked';
            } elseif ( $_SESSION[ 'eqptType' ] == "284" ) {
                echo ' checked';
              }
            ?>
          >
          <span class="radioLabel">284</span>
        </label>
      </div><!-- close formRowDiv -->

设备ID
设备类型:
>
284
  • 没有window.onload和document.ready
  • 干燥-不要重复你自己
  • 使用jQuery选择ID时,前面缺少“#”
  • 我使用了这一方法,减少了代码和复杂性
  • 不要删除要切换的属性
  • //根据选择单选按钮TR 280还是284,创建需要禁用/启用的所有elementId的数组
    变量fieldsAffected=['f2Cct2Or4Wire2W'、'f2Cct2Or4Wire4W'、'f3Cct2Or4Wire2W'、'f3Cct2Or4Wire4W'、'f4Cct2Or4Wire2W'、'f4Cct2Or4Wire4W'];
    函数eqptTypeVal(){//FUNC可在页面首次加载时检查eqptType的状态,并根据需要禁用/启用必填字段
    var rs=$('input[name=“eqptType”]:checked')。val()==280;
    $。每个(字段受影响,函数(i,val){
    $(“#”+val).prop('disabled',rs);
    })
    }//关闭函数eqptTypeVal
    $(函数(){//当页面加载时
    eqptTypeVal();//运行函数
    //单击任一收音机时,运行该功能
    $('input[name=“eqptType”]')。在(“单击”,eqptTypeVal);
    }); // 关闭docReady FUNC
    
    280
    284







    $(“#”+fieldsAffected[i])要选择受IDfieldsAffected影响的数组是IDs,第一个函数起作用,因为您有JS document.getElementById,对于Jquery,单击触发器需要在Jquery中预加“#”以选择数组中有ID的元素,或者如果可能的话,选择genrate数组['#f2Cct2Or4Wire2W'、'#f2Cct2Or4Wire4W'…等等@mplungjan感谢您提供了包含elementId symbol
    #
    concat的提示;但是,我将其添加到了下面两个函数中,但问题仍然存在。为什么不在整个代码中使用JS或Jquery?@fakerooted:您需要更改此行:$(fieldsafected[I])。setAttribute('disabled',false);至:$('#'+fieldsAffected[