Javascript getElementsByName 在 PHP 循环中不起作用

Javascript getElementsByName not working in PHP loop

我有以下 PHP 代码 :

//some code
$query = "SELECT * from store_00_transfers";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){

    echo "<tr><td align=center width=19%>{$row['item_no']}</td><td align=center><input type='text' value='{$row['qty']}' name='cqty[]' readonly ></td><td align=center><input type='number' min='0' name='nqty[]' onChange='check_not_large(this.value);' value='0'></td></tr>";        

}

//rest of code

现在,如您所见,onChange 中有一个函数。该功能旨在检查用户为新数量插入的数量是否不应超过旧数量(我使用此方法将数量从一个商店转移到另一个商店)。

另请注意,我在输入字段中指定了名称 cqty[]nqty[]

我有 javascript 代码 :

<script>
function check_not_large(res) {

  var old = document.getElementsByName("cqty[]");
  var type= document.getElementsByName("nqty[]");
  for(var i = 0; i < old.length; i++) {
    if(type[i].value > old[i].value){

      alert('Error : Qty Inserted should be Less than QTY found in Store !');
      alert(type[i].value);
      alert(old[i].value);
      return type[i].value = 0;

    }

  }
}

</script>

我在 javascript 中使用了 alert 来测试是否收集了正确的值,它似乎按需要工作,但不是为了验证如果新数量多于旧数量,它似乎只适用于前 4 行然后它卡住并开始验证任何行中的新数量与第一个旧数量行..我希望这对你有意义。

如有任何替代方案或建议,我们将不胜感激。

谢谢家伙

你的代码有一个问题是,每次你在 nqty 和 onchange 上输入值时,函数 check_not_large 函数都会被调用,它不仅验证当前行的 nqty 和 cqty 值,而且还验证所有以前的 nqty 和cqty 行 values.If 你的目的是只检查当前行的 nqty 值是否大于 cqty 值,一个更简洁的代码是为每个 nqty 和 cqty elements.The 代码提供一些唯一的 id 值如下所示进行优化。

PHP代码

$query = "SELECT * from store_00_transfers";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
echo "<tr>
        <td align=center width=19%>{$row['item_no']}</td>
          <td align=center>
             //instead of name attribute you can give an id here and also assuming $row['item_no'] is unique
             <input type='text' value='{$row['qty']}'    id='cqty{$row['item_no']}' readonly >//assuming item_no is unique
         </td>
         <td align=center>
           //instead of name attribute you can give an id here and also  assuming $row['item_no'] is unique
           <input type='number' min='0' id="nqty{$row['item_no']}"    onChange='check_not_large({$row['item_no']});' value='0'>
        </td>
        </tr>";        

}

Javascript代码

<script>
    function check_not_large(item_no) {
       var cqtvVal=document.getElementById("cqtv"+item_no).value;
       var nqtvVal=document.getElementById("nqtv"+item_no).value;
       //checking if typed value is greater than old value
       if(nqtvVal>cqtvVal)
       {
         //write whatever code you want to do like give a warning message or make the nqtv value reset to zero etc
       }   

   }
 </script>