Извлечение значения из 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')) ?>&nbsp;</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, Чтобы увидеть, что значение отправляет мне показывает мне, что он принимает только первое значение, когда я отправляю другую запись, он принимает первую сумму первой записи.

Author: Black Sheep, 2016-12-07

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')) ?>&nbsp;</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> 
 0
Author: Marcos, 2016-12-07 19:58:20

Вот почему все элементы имеют один и тот же идентификатор, вам нужно будет получить список элементов и перебрать их с помощью:

document.getElementsByName("cant[]");
document.querySelectorAll("#cantidad");

Кроме того, вы можете добавить к нему атрибут с индексом в цикле php и использовать его как часть селектора:

document.querySelector("#cantidad[data-index=1]");
 1
Author: Ziul, 2016-12-07 18:43:21