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);
?>

person Aaron M.    schedule 10.03.2010    source источник
comment
Что ж, первое, что нужно сделать, это перестать давать им одинаковые значения идентификаторов.   -  person Pointy    schedule 10.03.2010
comment
Спасибо за начало ... Я должен работать через php, предоставляя им уникальные значения идентификатора, но как мне заставить javascript компенсировать количество уникальных выборок, которые отображаются?   -  person Aaron M.    schedule 10.03.2010


Ответы (1)


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

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

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

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

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

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

person Pointy    schedule 10.03.2010
comment
Еще раз спасибо, Пойнти, я новичок в javascript, поэтому ваш ответ пролетел мимо меня. Я хотел бы лучше объяснить, что я пытаюсь сделать с этим кодом. Табличный список подэлементов, связанных с основной записью. Если два подэлемента не определены (NULL), мне нужно, чтобы пользователь сделал два выбора для этих значений. Однако вторые значения выбора зависят от первого, поэтому они каскадируются или объединяются в цепочку, я видел, что они помечены несколькими разными способами. Когда вы говорите, что элементы ‹select› должны иметь определенные отношения с другими элементами ‹select›, это то же самое, что быть зависимыми? - person Aaron M.; 10.03.2010
comment
Я знаю, что это не то, что вы хотели прочитать... Я просто собираюсь вернуться в Google и посмотреть, смогу ли я найти где-нибудь пример. - person Aaron M.; 10.03.2010
comment
Да, под отношениями, я думаю, я подразумевал то же самое, что и ты подразумеваешь под зависимостью. Дело в том, что один <select> заставляет что-то происходить с другим, и каким-то образом код должен знать, какой <select> управляет какими другими. Есть много разных способов добиться этого — например, вы можете использовать простое соглашение об именах. - person Pointy; 10.03.2010
comment
Вы говорите, что это звучит просто, но мне кажется, что это довольно сложно. Я понимаю вашу точку зрения относительно отношения, и я работаю с одним набором выборок, но говорю, что вы могли бы, например, использовать простое соглашение об именах. все еще не помогает мне понять, как различать в javascript количество связанных выборок, которые могут быть отображены. Я полагаю, я найму эксперта на пару часов, чтобы разбить его так, чтобы я мог понять / понять, ничто в этом мире не бесплатно, и я должен был знать. Я благодарю вас за ваше время сегодня Пойнти. - person Aaron M.; 10.03.2010