0

私は次の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>

私はalertJavaScriptで正しい値が収集されているかどうかをテストするために使用しましたが、必要に応じて機能するようですが、新しい数量が古い数量よりも多いかどうかを検証するためではなく、最初の4行でのみ機能するようで、スタックしてスタックします最初の古い数量行を使用して、任意の行で新しい数量の検証を開始します..これがあなたにとって意味があることを願っています.

代替案や提案をいただければ幸いです。

みんなありがとう

4

1 に答える 1

1

コードの問題の 1 つは、nqty および onchange に値を入力するたびに関数 check_not_large 関数が呼び出され、現在の行 nqty および cqty の値だけでなく、以前のすべての nqty および cqty 行の値も検証することです。現在の行の nqty 値が cqty 値より大きいかどうかのみをチェックします。より適切なコードは、各 nqty 要素と cqty 要素に一意の 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>
于 2016-04-16T16:41:42.257 に答える