javascript - несколько зависимых / каскадных / связанных блоков выбора в одной форме

Я заполняю опции блоков выбора через jquery и json, но я не уверен, как обращаться к нескольким экземплярам одних и тех же связанных блоков выбора в моей форме.

Поскольку поля выбора отображаются только при необходимости, некоторые записи будут иметь десять наборов связанных блоков выбора, а другим потребуется только один. Как генерировать уникальные варианты выбора для поддержки автоматического заполнения дополнительных параметров выбора?

Вот код, который я использую, и я заранее благодарю вас за предоставленную информацию.

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function populateACD() {
        $.getJSON('/acd/acd2json.php', {acdSelect:$('#acdSelect').val()},
function(data) {
                var select = $('#acd2');
                var options = select.attr('options');
                $('option', select).remove();
                $.each(data, function(index, array) {
                  options[options.length] = new Option(array['ACD2']);
                });
        });
}
$(document).ready(function() {
        populateACD();
        $('#acdSelect').change(function() {
                populateACD();
        });
});
</script>


<?php
require_once('connectvars.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$squery = "SELECT ACD1ID, ACD1 from ACD1";
$sdata = mysqli_query($dbc, $squery);
  // Loop through the array of ACD1s, placing them into an option of a select
echo '<select name="acdSelect" id="acdSelect">';
while ($row = mysqli_fetch_array($sdata)) {
echo "<option value=" . $row['ACD1ID'] . ">" . $row['ACD1'] . "</option>\n";
    }
  echo '</select><br /><br />';

<select name="acd2" id="acd2">
</select>

acd2json.php

<?php
$dsn = "mysql:host=localhost;dbname=wfn";
$user = "acd";
$pass = "***************";
$pdo = new PDO($dsn, $user, $pass);
$rows = array();
        if(isset($_GET['acdSelect'])) {
          $stmt = $pdo->prepare("SELECT ACD2 FROM ACD2 WHERE ACD1ID = ? ORDER BY ACD2");
          $stmt->execute(array($_GET['acdSelect']));
          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($rows);
?>

1 ответ

Решение

Если вы дадите каждому "select" (ну, каждому, что вам нужно контролировать) имя "class", которое идентифицирует их как таковые, то вы можете настроить обработчик для всех этих изменений следующим образом:

$('select.controlMe').click(function() {
  // ... whatever
});

Ваши выбранные элементы будут выглядеть так:

<select name='paramName' class='controlMe'>

Теперь, если <select> элементы должны иметь конкретные отношения с другими <select> элементы, то вам нужно будет описать это. Вы можете использовать плагин jQuery "метаданные", чтобы сами выбранные элементы могли быть аннотированы (опять же, значением "class"), и обработчик событий Javascript мог просто посмотреть на это. Однако я не совсем уверен, что делает ваш код.

Плагин метаданных находится здесь: http://plugins.jquery.com/project/metadata

Другие вопросы по тегам