Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何迭代js函数?_Javascript_Jquery_Html_Materialize_Visualforce - Fatal编程技术网

Javascript 如何迭代js函数?

Javascript 如何迭代js函数?,javascript,jquery,html,materialize,visualforce,Javascript,Jquery,Html,Materialize,Visualforce,我有一些重复按钮控制函数,如下所示,有没有一种方法可以迭代它们并减少代码量 $('[id$=cBC1]').change(function () { if ($(this).is(':checked')) { $(".cBC1_Row").prop("disabled", true); } else { $(".cBC1_Row").prop("disabled", false); } $('s

我有一些重复按钮控制函数,如下所示,有没有一种方法可以迭代它们并减少代码量

    $('[id$=cBC1]').change(function () {
      if ($(this).is(':checked')) {
        $(".cBC1_Row").prop("disabled", true); 
      }
      else {
        $(".cBC1_Row").prop("disabled", false);
      }
      $('select').material_select();
    });

    $('[id$=cBC2]').change(function () {
      if ($(this).is(':checked')) {
        $(".cBC2_Row").prop("disabled", true); 
      }
      else {
        $(".cBC2_Row").prop("disabled", false);
      }
      $('select').material_select();
    });

    ...
按要求添加HTML代码,它被包装在visualforce页面中,每个复选框将管理表中同一行上的文本字段

      <table>
        ...
        <tbody>
          <tr>
            <td>
              <apex:inputCheckbox id="cBC1"/>
              <label for="j_id0:j_id1:cBC1"></label>
            </td>
            <td>
              <div class="input-field">
                <apex:inputField styleClass="validate cBC1_Row"/>
              </div>
            </td>
            <td>
              <div class="input-field">
                <apex:inputField styleClass="validate cBC1_Row"/>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <apex:inputCheckbox id="cBC2"/>
              <label for="j_id0:j_id1:cBC2"></label>
            </td>
            <td>
              <div class="input-field">
                <apex:inputField styleClass="validate cBC2_Row"/>
              </div>
            </td>
            <td>
              <div class="input-field inline">
                <apex:inputField styleClass="validate cBC2_Row"/>
              </div>
            </td>
          </tr>
        </tbody>
      </table>

...

如果可以重构事件处理程序来处理每个元素,那么可以编写一个jquery选择器,并将相同的匿名事件处理程序绑定到这两个元素。如果看不到脚本与之交互的元素的标记,就很难确定此重构是否可行。

是的,按照您的模式可以执行:

for (let i = 1; i < amoutOfIds; i++) {
  $('[id$=cBC'+i+']').change(function () {
    if ($(this).is(':checked')) {
      $(".cBC"+i+"_Row").prop("disabled", true); 
    }
    else {
      $(".cBC"+i+"_Row").prop("disabled", false);
    }
    $('select').material_select();
  });
}
for(设i=1;i

您必须正确设置所拥有的
amountOfIds
,并且您还应该更改
让i=1
以您拥有的第一个id开始。

您可以在选择器中删除最后一个数字,并使用“attribute contains”代替,前提是您没有包含字符串
cBC
的多个元素 另一个更好的选择是使用类

$('[id*=cBC]').on('change', function () {
    $(".cBC"+ this.id.match(/\d+$/)[0] +"_Row").prop("disabled", this.checked); 
    $('select').material_select();
});

从你的代码看来,ID是匹配的。 为什么不使用:

$('[id^=“cBC”]')。更改(函数(){
var_id=$(this.id();
$(“+”id+“\u Row”).prop(“disabled”,$(this).is(“:checked”);
$('select')。材料选择();
});

请添加html以参数化不同的内容,只要有不同的参数集,就可以多次运行该函数。我打赌您的html可以简化。。。