Извлечение значения из input, которое находится внутри foreach с помощью javascript
у меня есть данные, которые я привожу из foreach и показываю их в таблице, и каждая запись имеет поле с именем qty, что происходит в том, что это поле, когда я отправляю его с помощью javascript, принимает первое значение из первой записи те, кто следует за ним, принимают его так, как если бы он был первым.
это регистрационный список, принесенный foreach
:
<?php foreach ($articulos as $articulo): ?>
<tr>
<td><?= $this->Number->format($articulo->idart) ?></td>
<td><?= h($codigo = $articulo->codigo_orion)?></td>
<td><?= h($nombre = $articulo->nombre)?></td>
<?php if($articulo->tipo_item_id == 1){
echo '<td>ELECTRICA</td>';
}elseif($articulo->tipo_item_id == 2){
echo '<td>ELECTRONICA</td>';
}elseif($articulo->tipo_item_id == 3){
echo '<td>FERRETERIA</td>';
}elseif($articulo->tipo_item_id == 4){
echo '<td>INSTRUMENTACIÓN</td>';
}elseif($articulo->tipo_item_id == 5){
echo '<td>COMUN Y REDES</td>';
}elseif($articulo->tipo_item_id == 6){
echo '<td>SALUD Y ALTURAS</td>';
}elseif($articulo->tipo_item_id == 7){
echo '<td>PAPELERÍA</td>';
}else{
echo '<td>PENDIENTE.</td>';
}
?>
<td><?= $this->Number->format($articulo->valor_u)?></td>
<td><?= $this->Html->link(__(''), ['controller'=>'Articulos','action' => 'view', $articulo->idart], array('class' => 'teal-text text-darken-1 fa fa-eye fa-lg')) ?> </td>
<td><input type="text" name="cant[]" class='validate' style='text-align:center' placeholder="Ejemplo: 1" id="cantidad" required/></td>
<td><button class="btn waves-effect waves-light teal fa fa-shopping-cart" refid="<?php echo $articulo->idart; ?>" onClick="getAjax(this)" ></button></td>
</tr>
<?php endforeach; ?>
это тот, который я получил через javascript
:
<script>
function getAjax(object){
var cantidad = document.getElementById("cantidad").value;
alert(cantidad);
var id = object.getAttribute("refid");
}
</script>
Когда я запускаю alert, Чтобы увидеть, что значение отправляет мне показывает мне, что он принимает только первое значение, когда я отправляю другую запись, он принимает первую сумму первой записи.
2 answers
Я предлагаю вам следующие изменения:
- добавить
ID
статьи (idart
) вid
input
- в функции
getAjax
добавьте второй параметр, который являетсяID
статьи.
Код может быть следующим:
<?php foreach ($articulos as $articulo): ?>
<tr>
<td><?= $this->Number->format($articulo->idart) ?></td>
<td><?= h($codigo = $articulo->codigo_orion)?></td>
<td><?= h($nombre = $articulo->nombre)?></td>
<td><?php
if ($articulo->tipo_item_id == 1) {
echo 'ELECTRICA';
} elseif ($articulo->tipo_item_id == 2) {
echo 'ELECTRONICA';
} elseif ($articulo->tipo_item_id == 3) {
echo 'FERRETERIA';
} elseif ($articulo->tipo_item_id == 4) {
echo 'INSTRUMENTACIÓN';
} elseif ($articulo->tipo_item_id == 5) {
echo 'COMUN Y REDES';
} elseif ($articulo->tipo_item_id == 6) {
echo 'SALUD Y ALTURAS';
} elseif ($articulo->tipo_item_id == 7) {
echo 'PAPELERÍA';
} else {
echo 'PENDIENTE.';
}
?></td>
<td><?= $this->Number->format($articulo->valor_u)?></td>
<td><?= $this->Html->link(__(''), ['controller'=>'Articulos', 'action' => 'view', $articulo->idart], array('class' => 'teal-text text-darken-1 fa fa-eye fa-lg')) ?> </td>
<!-- AQUI: El id del input tiene concatenado el idart -->
<td><input type="text" name="cant[]" class='validate' style='text-align:center' placeholder="Ejemplo: 1" id="cantidad<?php echo $articulo->idart; ?>" required/></td>
<!-- AQUI: Pasamos el idart como segundo parametro -->
<td><button class="btn waves-effect waves-light teal fa fa-shopping-cart" onClick="getAjax(this, '<?php echo $articulo->idart; ?>')" ></button></td>
</tr>
<?php endforeach; ?>
И javascript
:
<script>
function getAjax(object, idart){
var cantidad = document.getElementById("cantidad" + idart).value;
alert(cantidad);
// Mas codigo
}
</script>
Вот почему все элементы имеют один и тот же идентификатор, вам нужно будет получить список элементов и перебрать их с помощью:
document.getElementsByName("cant[]");
document.querySelectorAll("#cantidad");
Кроме того, вы можете добавить к нему атрибут с индексом в цикле php и использовать его как часть селектора:
document.querySelector("#cantidad[data-index=1]");