我目前正在尝试使用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);
}
}
});
}
});
答案 0 :(得分:1)
如果你把所有信息放在他们自己的身上,我认为你会有更好的结果。虽然我已经知道错了,但我认为选择函数的上下文正在混淆。
而不是将每个菜单设置为对象尝试:
$(document).ready(function() {
var setupdiv = (function(divId, jsonUrl, children)
{
jQuery('#' + divId)
.data("jsonurl", jsonUrl)
.data("children", children.join(",#"));
// Create the parent menu
jQuery('#' + divId).flexbox(jsonUrl + '.json',
{
// Update the child menu(s), based on the selection of the first menu
onSelect: function()
{
var children = jQuery(this).data("children");
var jsonUrl = jQuery(this).data("jsonurl");
if(children)
{
children = jQuery('#' + children);
alert('children was true');
}
else
{
children = jQuery();
alert('children was false');
}
var hiddendiv = jQuery('#' + this.id + '_hidden');
children.each(function()
{
var childJsonUrl = jsonUrl + '/' + hiddendiv.val() + '.json';
alert(childJsonUrl);
$(this).flexbox(childJsonUrl);
});
}
});
});
setupdiv('vehicle_vehicleMake_input', '/vehicles/getmakes', ['vehicle_vehicleModel_input']);
setupdiv('vehicle_vehicleModel_input', '/vehicles/getmodels', ['vehicle_vehicleTrim_input']);
setupdiv('vehicle_vehicleTrim_input', '/vehicles/gettrims', []);
});
<强>声明强>
我因拼写错误而闻名。请在使用此代码之前拼写检查;)
<强>更新强>
我已经更改了前两行代码,并且我已经对缩进进行了规范化,因为有多个制表符和空格。现在应该更容易阅读。