#php #jquery #ajax
Вопрос:
у меня есть несколько кодов, которые должны извлекать данные из базы данных и отображать их в виде полей выбора в зависимости от первого выбора.
В index.php у меня есть код jquery .change(функция () {..}), который должен заполнить второе поле выбора при изменении первого, и я думаю, что проблема здесь, потому что я проверил инструменты разработчика в chrome, action.php должно быть загружено на вкладке сеть, если действие load_month отправляется ajax и этого никогда не происходит.
Может ли кто-нибудь помочь выяснить, в чем проблема ?
function.php
function fill_product_list($connect) { $query = SELECT * FROM product WHERE product_status = 'active' ORDER BY product_name ASC "; $statement = $connect-gt;prepare($query); $statement-gt;execute(); $result = $statement-gt;fetchAll(); $output = ''; foreach($result as $row) { $output .= 'lt;option value="'.$row["product_id"].'"gt;'.$row["product_name"].'lt;/optiongt;'; } return $output; } function fill_month_list_product_wise($connect, $poduct_id) { $query = " SELECT * FROM month INNER JOIN stock ON stock.month_id = month.month_id WHERE stock.product_id = '".$product_id."' ORDER BY monat_id ASC "; $statement = $connect-gt;prepare($query); $statement-gt;execute(); $result = $statement-gt;fetchAll(); $output = 'lt;option value=""gt;date of delivery lt;/optiongt;'; foreach($result as $row) { $output .= 'lt;option value="'.$row["month_id"].'"gt;'.$row["month_name"].'lt;/optiongt;'; } return $output; }
index.php
lt;div class="form-group"gt; lt;labelgt;productslt;/labelgt; lt;hr /gt; lt;span id="span_product_details"gt;lt;/spangt; lt;hr /gt; lt;/divgt; lt;scriptgt; function add_product_row(count = '') { var html = ''; html = 'lt;span id="row' count '"gt;lt;div class="row"gt;'; html = 'lt;div class="col-md-8"gt;'; html = 'lt;select name="product_id[]" id="product_id" class="form-control selectpicker" data-live-search="true" requiredgt;'; html = 'lt;?php echo fill_product_list($connect); ?gt;'; html = 'lt;/selectgt;lt;input type="hidden" name="hidden_product_id[]" id="hidden_product_id' count '" /gt;'; html = 'lt;select name="month_id[]" id="month_id' count '" class="form-control selectpicker" data-live-search="true" requiredgt;'; html = 'lt;/selectgt;lt;input type="hidden" name="hidden_month_id[]" id="hidden_month_id' count '" /gt;'; html = 'lt;/divgt;'; html = 'lt;div class="col-md-3"gt;'; html = 'lt;input type="text" name="quantity[]" class="form-control" required /gt;'; html = 'lt;/divgt;'; html = 'lt;div class="col-md-1"gt;'; if(count == '') { html = 'lt;button type="button" name="add_more" id="add_more" class="btn btn-success btn-xs"gt; lt;/buttongt;'; } else { html = 'lt;button type="button" name="remove" id="' count '" class="btn btn-danger btn-xs remove"gt;-lt;/buttongt;'; } html = 'lt;/divgt;'; html = 'lt;/divgt;lt;/divgt;lt;br /gt;lt;/spangt;'; $('#span_product_details').append(html); $('.selectpicker').selectpicker(); } var count = 0; $(document).on('click', '#add_more', function(){ count = count 1; add_product_row(count); }); $(document).on('click', '.remove', function(){ var row_no = $(this).attr("id"); $('#row' row_no).remove(); }); // Here is the Problem, the action load_month never execute $('#product_id').change(function(){ var product_id = $('#product_id').val(); var btn_action = 'load_month'; $.ajax({ url:"action.php", method:"POST", data:{product_id:product_id, btn_action:btn_action}, success:function(data) { $('#month_id').html(data); } }); }); lt;/scriptgt;
action.php
if(isset($_POST['btn_action'])) { if($_POST['btn_action'] == 'load_month') { echo fill_month_list_product_wise($connect, $_POST['product_id']); } }
Комментарии:
1. когда будет вызвана эта функция add_product_row? Я не вижу никакого идентификатора, загруженного для его вызова.
2. @PHPHuppTechnologies здесь после var count =0; $(документ).on(«нажмите», «#add_more», функция(){ count = количество 1; add_product_row(количество); });
3. Подсказки: 1) Идентификаторы должны быть уникальными в html-документе (по определению, в этом весь смысл идентификатора). Вы не можете выбрать более одного элемента с одним и тем же идентификатором, но ваша функция добавления строки продолжает создавать больше раскрывающихся списков с одним и тем же идентификатором. Вместо этого используйте класс для определения раскрывающихся списков. 2) вам нужно узнать о делегировании событий, чтобы вы могли написать код, который обрабатывает события для элементов, которые еще не существуют на странице, когда объявлен обработчик событий.