Member 13464519 Ответов: 1

Html select form - как вызвать " динамически генерируемую опцию”


У меня есть HTML-форма вместе со скриптом, который автоматически запускает "опцию" по умолчанию (значения опций жестко закодированы).

У меня также есть автономный скрипт, который создает выбор "опций" динамически, основываясь на определенных значениях столбца в MySQL.

Проблема: при выборе из выпадающего списка из динамически генерируемого списка он ничего не "запускает" (ни ручной, ни автоматический, ручной в этом случае был бы просто хорош)

Форма, которая автоматически запускает опцию "по умолчанию".":

<form>
    <select name="fruit" onchange="showFruit(this.value)">
        <option>Choice:</option>    
        <option value="1">Yellow Fruit</option>
        <option value="2">Red Fruit</option>
    </select>
</form>

<script>
    window.onload = function () {
        var el = document.getElementsByName('fruit')[0];
        el.value = 1; //Set default value
        el.onchange(); //trigger onchange event
    }

    function showFruit(val) {
        alert(val);
    }
</script>


И код, который генерирует и отображает динамически созданный список из определенного столбца MySQL:

<? $connect = mysqli_connect('localhost', '*', '*', '*');   
 $sql="SELECT DISTINCT(fruit_name) AS fruit_name FROM fruit ORDER BY fruit_name ASC"; 
 $result  = mysqli_query($connect, $sql);  

 if(mysqli_num_rows($result) > 0){  
 $select= '<select name="select">';
 while($rs = mysqli_fetch_array($result)){  
      $select.='<option value="'.$rs['id'].'">'.$rs['fruit_name'].'</option>';
  }
}
$select.='</select>';
echo $select;



Как я могу подключить функцию onload к динамически генерируемому списку "параметры"? Мне вообще не нужны никакие жестко закодированные "опции". Только динамически генерируемый. И когда я выбираю из списка, я хотел бы получить ответ/реакцию любого рода.

Что я уже пробовал:

Я пытаюсь захватить выбранный вариант с помощью следующего, но не могу заставить его работать.

if ($result->num_rows > 0) {
    $display = true;

    $select = []
    while ($row = $result->fetch_assoc()) {
        $select[] = "<option value=\"{$row['id']}\">{$row['fruit_name']}</option>";
    }
}

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

Ваша жестко закодированная версия и сгенерированная совершенно разные...

<select name="fruit" onchange="showFruit(this.value)">
  <option value='...' >...</option>

<select name="select">
  <option value='...' >...</option>

Ваш жестко закодированный код знает только о "фрукте", а не о "выборе" (что может быть хорошо, зависит от вашего дизайна), но что точно неправильно, так это то, что к "выбору" не прикреплен даже обработчик...
Обновите свой код следующим образом:
$select= '<select name="select" onchange="showFruit(this.value)">';