【问题标题】:How to iterate this.value in javascript如何在javascript中迭代this.value
【发布时间】:2020-05-11 01:56:00
【问题描述】:

我正在尝试将 this.value 与 Drupal.settings["pis_var" + i].hasOwnProperty(j) 进行比较。

但是,我无法迭代 this.value。它只是与第一个值而不是一个一个地比较。

任何建议将不胜感激。

var controllers = $("[data-drupal]");
var pis = $("[data-pis]");

var i = 0;
var controller = $(controllers[i]);
var inventory = $(pis[i]);
var index = 0;   
$(controllers[i]).each(function (index) {
  console.log(Drupal.settings["pis_var" + i]);
  console.log(this.value);
  var j=0;
  for (j in Drupal.settings["pis_var" + i])
  {

       if (Drupal.settings["pis_var" + i].hasOwnProperty(j))        
       {           
          console.log(Drupal.settings["pis_var" + i][j] + '--' + i + '--' + j + '--' + this.value);
          if (this.value !== Drupal.settings["pis_var" + i][j])
          {
              console.log(this.value + '--' + Drupal.settings["pis_var" + i][j]);
          }

       }
      }
  i++;

});

HTML 代码(也就是 drupal 代码) 我是从页面源中派生出来的。

    <table>
      <tbody>
        <tr>
  <td class="label">Experiment&nbsp;#:&nbsp;<span class="form-required" title="This field is required.">*</span></td>
  <td><div class="form-item" id="ExExCode-wrapper">
 <input type="text" maxlength="8" name="ExExCode" id="ExExCode" size="8" value="201914" data-drupal="pic_code" data-pis="ExExCode_pis" class="form-text required" />
</div>
</td>
</tr>

<tr>
  <td class="label">Experiment&nbsp;Name&nbsp;<span class="form-required" title="This field is required.">*</span></td>
  <td><div class="form-item" id="edit-ExName-wrapper">
 <input type="text" maxlength="60" name="ExName" id="edit-ExName" size="60" value="Seismic sliding law" data-drupal="ExName" data-pis="ExName_pis" class="form-text required" />
</div>
</td>
</tr>

<tr>
  <td class="label">Experiment&nbsp;Description&nbsp;<span class="form-required" title="This field is required.">*</span></td>
  <td><div class="form-item" id="edit-ExDesc-wrapper">
 <input type="text" maxlength="80" name="ExDesc" id="edit-ExDesc" size="80" value="Using passive seismics to determin a glacier sliding law" data-drupal="ExDesc" data-pis="ExDesc_pis" class="form-text required" />
</div>
</td>
</tr>

<tr>
  <td class="label">Sponsor</td>
  <td><div class="form-item" id="edit-ExSponsor-wrapper">
 <input type="text" maxlength="18" name="ExSponsor" id="edit-ExSponsor" size="18" value="UNIV/N/A" data-drupal="ExSponsor" data-pis="ExSponsor_pis" class="form-text" />
</div>
</td>
</tr>
<tr>
  <td class="label">Sensors</td>
  <td><div class="form-item" id="edit-types-Sensor-wrapper">
 <input type="text" maxlength="25" name="types_Sensor" id="edit-types-Sensor" size="25" value="" data-drupal="types_Sensor" data-pis="types_Sensor_pis" class="form-text" />
</div>
</td>
</tr>

<tr>
  <td class="label">Recorders</td>
  <td><div class="form-item" id="edit-types-Recorder-wrapper">
 <input type="text" maxlength="25" name="types_Recorder" id="edit-types-Recorder" size="25" value="" data-drupal="types_Recorder" data-pis="types_Recorder_pis" class="form-text" />
</div>
</td>
</tr>
<tr>
  <td class="label">Foreign?</td>
  <td><div class="form-radios"><div class="form-item" id="edit-ExDF-N-wrapper">
 <label class="option" for="edit-ExDF-N"><input type="radio" id="edit-ExDF-N" name="ExDF" value="N"   data-drupal="ExDF" data-pis="ExDF_pis" class="form-radio" /> NO</label>
</div>
<div class="form-item" id="edit-ExDF-Y-wrapper">
 <label class="option" for="edit-ExDF-Y"><input type="radio" id="edit-ExDF-Y" name="ExDF" value="Y"   data-drupal="ExDF" data-pis="ExDF_pis" class="form-radio" /> Yes</label>
</div>
</div></td>
</tr>
<tr>
  <td class="label">Billing&nbsp;Address</td>
  <td><div class="form-item" id="edit-ExBilling-wrapper">
 <textarea cols="50" rows="10" name="ExBilling" id="edit-ExBilling"  data-drupal="ExBilling" data-pis="ExBilling_pis" class="form-textarea resizable "></textarea>
</div>
<div class="textarea-identifier description">CKEditor: the ID for <a href="/admin/settings/ckeditor">excluding or including</a> this element is <em>passcal:sdb/expt/201914/pisreview.edit-ExBilling</em>.</div></td>
</tr>

提前谢谢你。

【问题讨论】:

  • 你能分享一下HTML代码吗? (尤其是具有[data-drupal] 属性的 HTML 元素)
  • 我刚刚放了我的 HTML 代码。它来自页面源文件,因为此 javascript 与 drupal 一起使用。
  • 正如 Barmar 所说,您应该迭代 $(controllers) 而不是 $(controllers[i])。这种方式在每次迭代中this 将引用具有data-drupal 属性的第n 个控制器,this.value 将是输入的值,您可以使用它与Drupal.settings 中的数据进行比较。如果这不是您所需要的,请更详细地告诉我们您在每次迭代中要达到的目标。

标签: javascript jquery oop drupal-6


【解决方案1】:

您只在一个控制器上进行迭代。 $(controllers[i]).each() 启动时进行评估,因此它只使用i=0,当您执行i++ 时它不会转到下一个控制器。

你应该使用

controllers.each(function(i) {
    ...
})

您无需自己增加i

【讨论】:

  • 我得到了输出。但是,由于元素的原因,它会迭代 21 次或超过 21 次。这会导致执行时间变慢和不必要的输出。
  • $(controllers).each(function () { var k; for (var j in Drupal.settings["pis_var"]) {for (k in Drupal.settings["sdb_var"]) {if (Drupal.settings["pis_var"].hasOwnProperty(j) && Drupal.settings["sdb_var"].hasOwnProperty(k)) {var string1 = j.toString();var string2 = k.toString(); if (this.value !== Drupal.settings["pis_var"][j] && string1.localeCompare(string2) === 0) {document.getElementById("demo").innerHTML += this.value +"- -"+Drupal.settings["pis_var"][j] + "
    "; } }} } });
  • 它为每个带有data-drupal 的元素迭代一次。如果这超出了您的预期,也许您需要更改设置controllers 的方式。
  • 你为什么要发布代码?顺便说一句,你不需要写$(controllers)controllers 已经是一个 jQuery 对象。
  • 任何其他想法将不胜感激。这是我的第一篇文章,我不使用这个网站,我也是 javascript 的新手。
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多