Javascript getElementsByName не работает в цикле PHP

У меня есть следующее Код 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, Эта функция предназначена для проверки того, не должно ли число, введенное пользователем для нового qty, превышать старое qty (я использую этот метод для передачи qty из одного хранилища в другое).

Пожалуйста, обратите внимание, что я назначил имя 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>

Я использовал alert в JavaScript чтобы проверить, собраны ли правильные значения, и кажется, что он работает как нужно, но НЕ для проверки, если новый qty больше старого qty, кажется, что он работает только для первых 4 строк, затем он застревает и начинает проверять новый qty в любая строка с первым старым кол-во строк .. Надеюсь, это имеет смысл для вас.

Любая альтернатива или предложение будут оценены.

Спасибо парень

0

Решение

Одна проблема с вашим кодом состоит в том, что каждый раз, когда вы вводите значение в nqty и onchange, вызывается функция check_not_large, которая не только проверяет значения nqty и cqty текущей строки, но также и все предыдущие значения строк nqty и cqty. Если ваша цель состоит в том, чтобы проверять только, если текущее значение nqty строки больше, чем значение cqty, гораздо более аккуратный код будет давать некоторое уникальное значение id каждому элементу nqty и cqty. Код для того же самого может быть оптимизирован, как указано ниже.

Код 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>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]