簡體   English   中英

HTML選擇表單-如何觸發“動態生成的選項”

[英]HTML select form - how to trigger “dynamically generated option”

我有一個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函數附加到動態生成的“選項”列表? 我根本不需要任何硬編碼的“選項”。 只是動態生成的一個。 當我從列表中選擇時,我希望獲得各種響應/反應。

為了清楚起見,我可能會將它們分開,並將模板文件包含到邏輯文件中,該文件負責格式化頁面數據。 通過選擇條件后面的選擇菜單,可以確保它僅在有數據要放入時才呈現。

我以一種特殊的方式對此進行了格式化,您無需遵循,但選擇一致的樣式並始終堅持使用是相當不錯的做法。 我還將您對mysqli類的用法更新為面向對象的方法。 請注意,在這種情況下,使用Mysqli->query時不容易受到sql注入的攻擊,但是如果您打算接受用戶輸入,則應研究准備好的語句以防止sql注入

實際上,我在模板文件中使用<?= ?>運算符,這是<?php echo '';?>的簡寫,使用<? 不建議您使用php文件打開器<?php是標准的。

PHP還允許短的開放標記<? (不鼓勵這樣做,因為只有在使用short_open_tag php.ini配置文件指令啟用此功能時,或者如果使用--enable-short-tags選項配置了PHP,該功能才可用)。

當混合使用PHP和HTML時,通常更清楚(選擇!),並在可能的情況下使用替代if和loop語法( <?php if () : ?> <?php endif; ?>而不是<?php if () { ?> <?php } ?>

邏輯文件

<?php  
  // page.php 
  $display = false;

  $mysqli = new mysqli(HOST, USER, PASSWORD, SCHEMA);
  $sql = "SELECT DISTINCT(fruit_name) AS fruit_name FROM fruit ORDER BY fruit_color ASC"; 
  $result = mysqli->query($sql);

  // not sure this is necessary in this particular case, but 
  if ($result->num_rows > 0) {
      $display = true;

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

  include 'htmlfile.php';
?>

模板文件

<!-- htmlfile.php -->
<form>
    <?php if ($display) : ?>
        <select name="select">
            <?= implode('', $select) ?>
        </select>
    <?php endif; ?>
</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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM