私は現在、Flexbox Jqueryプラグインを使用して連鎖選択のセットを設定しようとしています(これは連鎖用に特別に設計されたものではありませんが、そのために使用できます)。
すべてを明示的に設定すればチェーンは機能しますが、コードを乾かして理解しやすくしようとしています。そういうものとして、私は以下のコードを思いついた。
現在、すべてのボックスが最初に読み込まれ、クエリを実行します。私が抱えている問題は、(以下のように)メニューを反復処理すると、onSelect機能が失われることです。最後にロードしたメニューに対してのみ起動します。
私の理解では、毎回異なるJQueryセレクターを使用しているので$('#' + fbMenu.divId)
、別のメニューにonSelect動作を設定しても問題ありませんが、明らかにそうではありません。ボックスをロードするたびに、どういうわけかバインディングを上書きしていますか?
うまくいけば、ドロップダウンごとにonSelect機能を指定する必要はありません。これは、ドロップダウンが多数存在する可能性があるためです。
あなたが提供できるどんな援助にも感謝します!
$(document).ready(function() {
// Create the variables for data objects
var vehicleMakeFb = new Object();
var vehicleModelFb = new Object();
var vehicleTrimFb = new Object();
// Set up each menu with the divId, jsonUrl and the chlid menus that will be updated on select
vehicleMakeFb.divId = 'vehicle_vehicleMake_input';
vehicleMakeFb.jsonUrl = '/vehicles/getmakes';
vehicleMakeFb.children = [vehicleModelFb];
vehicleModelFb.divId = 'vehicle_vehicleModel_input';
vehicleModelFb.jsonUrl = '/vehicles/getmodels';
vehicleModelFb.children = [vehicleTrimFb];
vehicleTrimFb.divId = 'vehicle_vehicleTrim_input';
vehicleTrimFb.jsonUrl = '/vehicles/gettrims';
vehicleTrimFb.children = [];
// Create an array of all menu objects so that they can be iterated through
var allMenus = [vehicleMakeFb,vehicleModelFb,vehicleTrimFb];
// Create the parent menu
for (var i = 0; i < allMenus.length; i++) {
var fbMenu = allMenus[i];
alert(fbMenu.divId);
$('#' + fbMenu.divId).flexbox(fbMenu.jsonUrl + '.json', {
// Update the child menu(s), based on the selection of the first menu
onSelect: function() {
for (var i = 0; i < fbMenu.children.length; i++) {
var fbChild = fbMenu.children[i];
var hiddendiv = document.getElementById(fbMenu.divId + '_hidden');
var jsonurl1 = fbChild.jsonUrl + '/' + hiddendiv.getAttribute('value') + '.json';
alert(jsonurl1);
$('#' + fbChild.divId).flexbox(jsonurl1);
}
}
});
}
});