Estaba tratando de crear una forma dinámica para uno de mis proyectos. Inicialicé una solicitud ajax para recuperar el valor de un campo.
<div class="row"> <div class="col-md-4"> <?php echo $form->field($modelAddress, "[{$i}]rt_item")->widget(Select2::class, [ 'data' => $invListData, 'options' => ['placeholder' => '--Select Request Type--', 'class' => 'form-control'], 'pluginOptions' => [ 'allowClear' => true ], 'pluginEvents' => [ 'select2:select' => 'function(params) { var itemVal = $(this).val(); var attrID = $(this).attr("id").replace(/[^0-9.]/g, ""); $.ajax({ "url" : "units", "type" : "post", "data" : {itemID: itemVal}, success: function (data) { console.log(data); console.log(attrID); $("#reqitems-"+attrID+"-rt_unit").val(data); }, error: function (errormessage) { //do something else alert("not working"); } }); }', ], ]); ?> </div> <div class="col-sm-4"> <?= $form->field($modelAddress, "[{$i}]rt_unit")->textInput(['maxlength' => true, 'readOnly' => 'true']) ?> </div>El ajax está funcionando perfectamente en el primer índice de la forma dinámica. Pero desafortunadamente desde el índice de envío, no pasa nada. Revisé un par de preguntas y respuestas en stackoverflow para la situación, pero todo falló.
¿Alguien puede ayudarme a encontrar una solución?
Hola, encontré una solución de forma alternativa usando jquery.
Dado que los elementos se cargan dinámicamente, necesitamos generar dinámicamente a través de AJAX o algo similar el siguiente elemento de entrada. Eliminé el pluginEvent e inicialicé una nueva clase para el campo dinámico.
<?php echo $form->field($modelAddress, "[{$i}]rt_item")->widget(Select2::class, [ 'data' => $invListData, 'options' => ['placeholder' => '--Select Request Type--', 'class' => 'reqItem form-control'], 'pluginOptions' => [ 'allowClear' => true ]); ?>Luego, manualmente, escribí el script jquery para leer el elemento.
<script> $(document).on("change", ".reqItem", function() { var itemVal = $(this).val(); var attrID = $(this).attr("id").replace(/[^0-9.]/g, ""); $.ajax({ "url": "units", "type": "post", "data": { itemID: itemVal }, success: function(data) { console.log(data); console.log(attrID); $("#reqitems-" + attrID + "-rt_unit").val(data); }, error: function(errormessage) { //do something else alert("not working"); } }); });Pero aún estoy trabajando para encontrar la solución adecuada usando Yii.