2016-04-16 11 views
0

Ich habe die folgenden PHP-Code:Javascript getElementsByName nicht in PHP-Schleife arbeiten

//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 

Nun, wie Sie eine Funktion gibt es innerhalb onChange sehen können. Diese Funktion soll überprüfen, ob die vom Benutzer eingegebene Zahl für neue Mengen die alte Menge nicht überschreiten soll (ich verwende diese Methode, um die Menge von einem Geschäft zu einem anderen zu übertragen).

Bitte beachten Sie auch, dass ich innerhalb der Eingabefelder cqty[] und nqty[] einen Namen vergeben habe.

Ich habe JavaScript-Code:

<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> 

ich verwendet habe alert in Javascript zu testen, ob korrekte Werte gesammelt und es scheint, dass es je nach Bedarf funktioniert, aber nicht für, wenn neue Menge Validieren ist mehr als alte Menge, es scheint, dass es nur für die ersten 4 Reihen funktioniert, dann bleibt es hängen und beginnt die neue Menge in jeder Zeile MIT der ersten alten Menge Zeile zu validieren. Ich hoffe, das macht für Sie Sinn.

Jede Alternative oder Vorschlag wird es zu schätzen wissen.

Dank Guy

+0

was 'name = 'cqty []'', warum Sie diese Art von Namen havig Array Zeichen verwenden ?? –

+0

Ohne dieses Array-Zeichen erhalte ich JavaScript-Fehler mit alert - object nodelist oder undefined. Ich bin mit JS nicht so vertraut. Wie ich bereits erwähnt habe, wird die 'while-Schleife' in der While-Schleife wiederholt. –

+0

Sie haben einen Tippfehler in Ihrem html "" " – user3

Antwort

1

Ein Problem mit Ihrem Code ist, dass jedes Mal wenn Sie Eingangswert auf nMenge und auf Onchange die Funktion check_not_large Funktion aufgerufen wird und es nicht nur aktuelle Zeile nMenge und cqty Werte validieren, sondern auch alle vorherigen nMenge und cqty Reihe Werte. Wenn Ihr Zweck ist, nur zu prüfen, wenn gegenwärtiger Reihe nqty Wert größer als cqty Wert ist, ist ein viel besserer Code, zum irgendeines identischen Identifikationswertes zu jedem nqty und cqty Elementen zu geben. Der Code für denselben kann wie optimiert werden unten angegeben.

PHP-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> 
      //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-Code

<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> 
+0

Ich verstehe Ihren Code, Zuweisung von ID würde helfen, aber das Problem, dass item_no ist nicht eindeutig.I habe ID (in der Tabellenstruktur) und ich habe es verwendet aber es scheint, dass es mir keine Warnung gibt. Ich werde noch einmal überprüfen. Danke für Ihre Antwort –

+0

Ok, wenn es so wäre, dann setzen Sie eine Zählvariable innerhalb der php while-Schleife, die den aktuellen Iterationswert enthält.Verwenden Sie diese Zählvariable anstelle von item_no oder verwenden Sie die aktuelle Zeilennummer –

+0

Ok, lass mich es jetzt versuchen, und ich werde es wissen lassen Danke nochmals –

Verwandte Themen