3

私は何かが欠けています。

jquery を使用して非常に簡単に考えました - Workersドロップダウンで選択した値に基づいて、 Fruit Optionsドロップダウンに特定の値のみを表示したいと考えています。

たとえば、RoyがWorkersドロップダウンから選択された場合、Apples と Peachs のみがFruit Optionsドロップダウン内のオプションとして表示されるようにします。 JohnがWorkersドロップダウンから選択された場合、Oranges、Pears、Peaches、Nuts のみがフルーツ オプションドロップダウン。

jquery を使用して、Worker ドロップダウンの選択に基づいて Fruit Options ドロップを正しくフィルタリングするにはどうすればよいですか?

私のjfiddleはここにありますhttp://jsfiddle.net/justmelat/BApMM/1/

私のコード:

 <form method="post">
    Worker:  <select  id="workers" name="Select1">
    <option>Roy</option>
    <option>John</option>
<option>Dave</option>
    </select>
</form>
<br><br>
<form method="post">
    Fruit Options: <select id="fruitopts" name="Select2">
    <option>Apples</option>
    <option>Oranges</option>
    <option>Pears</option>
    <option>Peaches</option>
    <option>Grapes</option>
    <option>Melons</option>
    <option>Nut</option>
    <option>Jelly</option>
    </select></form>
4

3 に答える 3

5

ワーカーと果物の関係をマッピングするには、データ構造が必要です。以下のようなもの、

var workerandFruits = {
    Roy: ["Apples", "Peaches"],
    John: ["Oranges", "Pears", "Peaches", "Nut"]
}

次に、 ( )内の選択されたオプション テキストに基づいてオプションをフィルター処理する必要があるonchangeハンドラーを作成する必要があります。$('select[name=Select1')$('select[name=Select2])Select1$(this).find('option:selected').text();

変数を使用しworkerandFruitsて、選択したワーカーが好む果物を決定し、それにSelect2基づいてデータを入力できます。

$workers.change(function () {
    var $selectedWorker = $(this).find('option:selected').text();
    $fruits.html($fruitsList.filter(function () {
         return $.inArray($(this).text(), workerandFruits[$selectedWorker]) >= 0;
    }));
});

デモ: http://jsfiddle.net/tKU26/

于 2013-06-07T20:10:26.510 に答える
2

次のようにします。

<select id="worker"></select>
<select id="fruits"></select>

var data = [ // The data
    ['Roy', [
        'Apples','Peaches'
    ]],
    ['John', [
        'Oranges', 'Pears', 'Peaches', 'Nuts'
    ]]
];

$a = $('#worker'); // The dropdowns
$b = $('#fruits');

for(var i = 0; i < data.length; i++) {
    var first = data[i][0];
    $a.append($("<option>"). // Add options
       attr("value",first).
       data("sel", i).
       text(first));
}

$a.change(function() {
    var index = $(this).children('option:selected').data('sel');
    var second = data[index][1]; // The second-choice data

    $b.html(''); // Clear existing options in second dropdown

    for(var j = 0; j < second.length; j++) {
        $b.append($("<option>"). // Add options
           attr("value",second[j]).
           data("sel", j).
           text(second[j]));
    }
}).change(); // Trigger once to add options at load of first choice

http://jsfiddle.net/xRTAk/

于 2013-06-07T20:10:18.100 に答える