javascript - несколько зависимых / каскадных / связанных блоков выбора в одной форме - PullRequest
1 голос
/ 10 марта 2010

Я заполняю опции блоков выбора через 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 Ответ

0 голосов
/ 10 марта 2010

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

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

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

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

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

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

...