Моя идея состоит в том, чтобы сохранить в массиве PHP выбранные <option>
из разных html <select>
.
В форме, которую я генерирую с помощью функции php вызывается из функции Jquery a <ul>
, содержащей текст каждого элемента списка, и <select>
Примерно так:
Часть формы, в которую добавляются элементы списка:
<div>
<label for="lineasP" id="asignarBdto" hidden>Productos de este pedido:</label>
</div>
<div>
<ul id="lineaPedidos" hidden>
<!-- Added here -->
</ul>
</div>
JQuery функция, которая вызывает функцию PHP:
$("#pedidos").on("input", function() {
$.get("cambio_cliente.php", { idPedido: $("#pedidos").val()}, function (data) {
$("#lineaPedidos").empty();
$("#lineaPedidos").append(data);
$("#asignarBdto").show();
$("#lineaPedidos").show();
});
});
PHP функция:
// Si llegamos a este script por haber seleccionado un pedido
if(isset($_GET["idPedido"])){
// Abrimos una conexión con la BD y consultamos la lista de productos dado un pedido
$conexion = crearConexionBD();
$resultado = listarProductos($conexion, $_GET["idPedido"]);
if($resultado != NULL){
// Para cada producto del listado devuelto
foreach($resultado as $lineaPedido) {
//Listamos los productos de cada pedido
echo "<li>" . $lineaPedido["NUM_LINEA_P"] .": cantidad= ". $lineaPedido["CANTIDAD"] .", importe= ". $lineaPedido["IMPORTE"] ." <br><label>Base de dto: </label><select class=\"linPed\" required><option value=\"\" hidden disabled selected>% DTO</option> <option value=\"21\">21%</option> <option value=\"16\">16%</option> <option value=\"8\">8%</option></select></li>";
}
}
// Cerramos la conexión y borramos de la sesión la variable "idPedido"
cerrarConexionBD($conexion);
unset($_GET["idPedido"]);
}
Пока все хорошо.
Форма отображает эти поля без проблем:
Проблема начинается здесь
Мне нужно сохранить каждый выбранный <option>
в массиве, о котором я упоминал в самом начале. Я не знаю, сколько <select>
будет создано, поэтому я не могу создать идентификаторы для каждого из них. Я решил создать класс (linPed) для этого выбора и попробовал эту JS функцию:
$(".linPed").on("input", function(){
alert("all good");
});
Сначала я попытался сделать «ведение журнала», чтобы увидеть, правильно ли работает функция, но не показать предупреждение. Несмотря на это, даже если функция выполнена правильно, как мне добавить в массив выбранное значение .linPed
? Или, может быть, есть более простой способ сделать это?
РЕДАКТИРОВАТЬ 1:
alert("hello");
$("select.linPed").on("change", function(){
alert("this works");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<div>
<li>
Hello
</li>
<select class="linPed">
<option value="21">
21%
</option>
<option value="16">
16%
</option>
<option value="8">
8%
</option>
</select>
</div>
<div>
<li>
bye
</li>
<select class="linPed">
<option value="21">
21%
</option>
<option value="16">
16%
</option>
<option value="8">
8%
</option>
</select>
</div>
</ul>
<select class="linPed">
<option value="21">
21%
</option>
<option value="16">
16%
</option>
<option value="8">
8%
</option>
</select>
Я создал тестовый фрагмент, если проблема заключалась в том, что <select>
находились внутри <li>
.
РЕДАКТИРОВАТЬ 2:
Я до сих пор не знаю почему, но если я попытаюсь получить доступ к значению <option>
из отдельного скрипта, это не сработает. Я попытался добавить поле onchange
к <select>
и, наконец, работает.