あなたの主な問題は、あなたのeach
機能からtagName
が変更にハンドラ内に存在しないということでした。変更イベントが発生すると、イベントの起動者であった要素であるthis
が与えられます。それがあなたの価値を引き出す必要がある場所です。
ループを通過するたびに、すべてのselect要素にイベントハンドラがアタッチされていました。だから、最後にループを通過したときに、9月の最後のtagNameにフィルタを設定するイベントハンドラがアタッチされました。
イベントハンドラを一度接続し、$(this).val()
をチェックするだけで、選択された内容が表示されます。
$.each(tagged, function(tagName) {
$('<option/>', {
text: tagName
}).appendTo($selectOptions);
});
$selectOptions.on('change', function() {
$eventDate
.fadeOut()
.filter(tagged[$(this).val()])
.fadeIn();
});
また、あなたの$selectOptions
は$('select')
に設定しました。それぞれtagName
を$selectOptions
に追加するときは、ページ上のすべての選択に追加します。現在のところ、あなたは1つしか持っていませんが、それは後であなたをかむ物のタイプです。私はそれを次のように変更しました:
$selectOptions = $('#sort_month select'),
最後に、私はすべてのデータを見ているときにすべてのオプションが選択されていなかったと私に迷惑をかけました。だから、私はそれをリストボックスに追加し、Allボタンが押されたときにリストを更新しました。
$selectOptions.on('change', function() {
if ($(this).val() == 'All') {
$eventDate.fadeIn();
} else {
$eventDate
.fadeOut()
.filter(tagged[$(this).val()])
.fadeIn();
}
});
https://jsfiddle.net/hrsxb6wq/
あなたのフィドルのリンクが正しくありません。私はまた、dropdown.-からすべての作業をするために、チェックを追加しました –