【问题标题】:Loop and increment with while in javascript在javascript中使用while循环和递增
【发布时间】:2017-06-19 01:28:02
【问题描述】:

需要一些帮助。 Javascript 不是我的强项。我试图循环遍历以下元素 id,每次迭代本身递增 1。例如,c4_r1_cell_1 将变为 c4_r2_cell_2、c4_r3_cell_3 等,以此类推,每次循环通过。在进入下一个循环之前,我需要在每次迭代中使用相同的增量数发生 6 次。您在哪里看到“+ loop_count +”每次都需要相同的数字才能进入下一个循环运行,直到它到达最后一个。

我不需要它增加我的每个“+ loop_count +”,就像它们是单独的迭代一样,它增加了 1、2、3、4、5、6。我需要它们是 1,1,1,1,1,1,然后是下一个循环迭代 2,2,2,2,2,2 等。

正在生成的 HTML:

<td><input type="text" id="c1_r<?php echo $i; ?>_cell_2" name="c1_r<?php echo $i; ?>_cell_2" value="<?php echo $row2['c1_r'.$i.'_cell_2']; ?>" /></td>
<td><input type="text" id="c2_r<?php echo $i; ?>_cell_3" name="c2_r<?php echo $i; ?>_cell_3" value="<?php echo $row2['c2_r'.$i.'_cell_3']; ?>" /></td>
<td><input type="text" id="c3_r<?php echo $i; ?>_cell_4" name="c3_r<?php echo $i; ?>_cell_4" value="<?php echo $row2['c3_r'.$i.'_cell_4']; ?>" /></td>
<td><input type="text" id="c4_r<?php echo $i; ?>_cell_5" name="c4_r<?php echo $i; ?>_cell_5" value="<?php echo $row2['c4_r'.$i.'_cell_5']; ?>" /></td>
<td><input type="text" id="c5_r<?php echo $i; ?>_cell_6" name="c5_r<?php echo $i; ?>_cell_6" value="<?php echo $row2['c5_r'.$i.'_cell_6']; ?>" /></td>

这是我现在无法正常工作的:

var loop_count = 1;
while (loop_count < 50) {
document.getElementById("c4_r" + loop_count + "_cell_" + loop_count + "") = 
document.getElementById("c5_r" + loop_count + "_cell_" + loop_count + "");
document.getElementById("c5_r" + loop_count + "_cell_" + loop_count + "") = '';
loop_count++;
}

【问题讨论】:

  • 您的代码应该按照您的解释进行。
  • 您不能分配给函数调用。 document.getElementById() = ; 无效。
  • 控制台出现以下错误。未捕获的 ReferenceError:分配中的左侧无效
  • 你能显示你的html吗?
  • 代码在此处换行。它实际上所做的是将值从 1 个输入复制到另一个输入,因此该行上的 =。

标签: javascript


【解决方案1】:

您需要获取和设置您选择的 DOM 元素的 innerHTML。就目前而言,您正在尝试选择整个 DOM 元素并将其分配给另一个 DOM 元素 - 这是您不能做的事情。但是,您可以获取此元素的 innerHTML 值并分配它们。

var loop_count = 1;
while (loop_count < 50) {
document.getElementById("c4_r" + loop_count + "_cell_" + loop_count).value = document.getElementById("c5_r" + loop_count + "_cell_" + loop_count) ? document.getElementById("c5_r" + loop_count + "_cell_" + loop_count).value : '';
document.getElementById("c5_r" + loop_count + "_cell_" + loop_count).value = '';
loop_count++;
}

如果你需要检查 DOM 元素是否存在,你可以使用一个简单的 if 语句:

var loop_count = 1;
while (loop_count < 50) {
  if (document.getElementById("c4_r" + loop_count + "_cell_" + loop_count)) {
  document.getElementById("c4_r" + loop_count + "_cell_" + loop_count).value = document.getElementById("c5_r" + loop_count + "_cell_" + loop_count) ? document.getElementById("c5_r" + loop_count + "_cell_" + loop_count).value : '';
}
  document.getElementById("c5_r" + loop_count + "_cell_" + loop_count) ? document.getElementById("c5_r" + loop_count + "_cell_" + loop_count).value = '' : undefined;
  loop_count++;
}

【讨论】:

  • 我试过这个,但我在一些输入中有空值,它会循环并通过错误无法读取 null 的属性“innerHTML”有没有办法解决这个问题?
  • @BeKustom - 我已经更新了我的答案以包括` || ''` 在第一行的末尾,应该可以解决这个问题。
  • 我尝试了更新的代码,它仍然给出了同样的错误。如果可能的话,我很想使用 javascript 解决方案而不是在 jQuery 中混合。
  • @BeKustom 你总是有一个具有该确切 ID 的 dom 元素吗?该错误似乎表明您一直没有该 id。
  • 不用担心@BeKustom,它仍然有点冗长,但你可以将你的选择分配给变量来清理它。
【解决方案2】:

我做了一些修改以提供上下文,希望底层逻辑应该是您正在寻找的:jsfiddle 下面是纯 Javascript 的 sn-p:

var loop_count = 1;  //*variable initialization*
while(loop_count<50){    //*iterator and the condition*   
 var text=document.getElementById("c4_r" + loop_count + "_cell_" + loop_count + "").innerHTML;   // *assigning to a a new variable the content of the element matching the ID*
loop_count++; }     //variable increment to meet stop iteration when at 50 and closure of the while.

【讨论】:

  • 这是我在逻辑上寻找的东西,但它会在它迭代的某些输入中考虑可能的空值吗?
  • 如果它看到一个空值,你希望它发生什么?我会添加一个 'if(foo){code}' 来定义这个动作。
【解决方案3】:

试试这个方法。它可以帮助你

var loop_count = 1;
while (loop_count < 50) {

    $('#c4_r' + loop_count + '_cell_' + loop_count + '').val($('#c5_r' + loop_count + '_cell_' + loop_count + '').val());
    $('#c5_r' + loop_count + '_cell_' + loop_count + '').val('');

    loop_count++;
}

【讨论】:

  • 谢谢@neeraj,这种方式可以通过混合 jQuery 来实现。
  • @BeKustom - 如果您不想混入 jquery,请查看我的回答
猜你喜欢
  • 2018-10-08
  • 1970-01-01
  • 2018-06-26
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多