1

我正在使用 PHP、jQuery 和 Spry 的组合来提供一系列列表框,用户将在其中首先选择车辆类型,然后是品牌,然后是模型,最后是特定模型。

我所有的列表框 (SELECT) 都工作正常,并且它们使用 Spry 元素正确更新。每个列表框都是从不同的 Spry XML 数据集填充的,这是我的问题。

如果我向用户展示所有四个列表框,则脚本必须去获取所有四个 XML 批次以填充所有四个列表框,这需要几秒钟。我想要做的是按顺序创建/启用列表框,所以在用户从第一个列表框中选择时,第二个被创建/启用,当他们从第二个中选择时,第三个被创建/启用......等等在。

设置 disabled 属性不好,因为脚本在处理之前已经获取了 XML。

有任何想法吗??

更新——对不起,伙计们,不要认为我把我的问题说得很清楚。

在我的脚本的顶部,我声明了四个 Spry XML 数据集变量,每个变量都关闭(在需要时)并对服务执行复杂的 SOAP 查询,然后该服务返回一个 XML 块。每个查询都依赖于最后一个查询,因此一旦用户选择了车辆类型,第二个数据集就会刷新以提供准确的制造商列表。当他们选择制造商时,第三个列表会刷新,以提供该制造商的准确型号列表。当他们选择模型时,会刷新该模型的模型衍生列表(第四个列表)。

在我的脚本下方,我有四个 SELECT,每个都填充有来自 spry 查询的数据。现在,用户必须依次从每个列表中选择所需的选项,以便在最终框中获得正确的模型。我想要做的只是在生成页面时填充第一个框,然后在用户在每个框中选择所需值时填充(或创建??)第二个、第三个和第四个框,就像在 Autotrader 网站中发生的那样( www.autotrader.co.uk)。

正如我在最初的帖子中所说,我不能使用“禁用”属性,甚至不能使用 jQuery show() 和 hide() 函数,因为在所有四个数据集都被提取并填充到 SELECT 之后,这些函数才会触发. 我需要在需要时从头开始理想地创建元素的东西,以停止在开始时获取四批 XML...

希望这可以澄清

4

3 回答 3

0

与其禁用它们,不如直接使用 jQuery 隐藏/显示?.hide() .show(),

于 2010-04-26T14:33:28.010 回答
0
$('option').click( function() {
    if($(this).val() != 'Select one...'){
        $(this).next('select').attr('enabled', 'enabled');
        $(this).next('select ~ select').attr('disabled', 'disabled');

        /* or */
        $(this).after('<!-- Generated select/option HTML -->').nextAll('select').remove();
    }
}

这完全未经测试,但根据 API,可能有效。我不确定我是否完全理解您的问题,但是如果您希望在选择后启用下一个选项并在此之后禁用这些选项,直到单击下一个选项,如果它有效,这将是您的票。

如果是动态添加(或删除)它们,您可以使用.afterand.nextAll方法添加和精确定位选择框以进行删除。

更新:哎呀。有错误的选择器。

于 2010-04-26T14:50:23.583 回答
0

我不确定我知道你在问什么,但似乎你正在寻找类似的东西:

$("#select1").bind("change",function() {
    var sel=$(this).attr("value");
    $.ajax({
        url:sel + ".xml",
        dataType:"xml",
        success:function(xml) {
            $(xml).children("option").each(function() {
                $("<option />",attr:{ value:$(this).attr("value") }).text($(this).text()).appendTo("#select2");
            });
        }
    });
});

我在这里离基地很远吗?我的意思是,这只是一种基本的处理方式(可能有十亿个漏洞),但您希望实时更新,对吧?您不希望它在页面加载时获取所有 XML,对吗?您也可以更改$("#select1")$("#formname select").each(function() {,然后让它.next("select")在获取 XML 后选择将其附加到。

我承认,我从来没有真正使用过 Spry。我已经看到它使用了一点,似乎我可以做我需要使用 jQuery 的事情。

于 2010-04-26T14:56:44.493 回答