如何动态启用/创建元素

时间:2010-04-26 14:00:45

标签: php jquery spry

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

我的所有列表框(SELECT)都运行正常,并且使用Spry元素正确更新。每个列表框都是从不同的Spry XML Dataset填充的,这是我的问题。

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

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

任何想法??

的Si

更新 - 对不起,不要以为我的问题很清楚。

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

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

正如我在最初的帖子中所说,我不能使用'禁用'attr,甚至jQuery show()和hide()函数,因为这些函数在获取并填充所有四个数据集之后才会触发进入SELECT。我需要一些理想情况下从头开始创建元素的东西,并在需要时停止在开始时获取四个XML ...

希望这澄清

3 个答案:

答案 0 :(得分:0)

为什么不使用jQuery隐藏/显示,而不是禁用它们? .hide() .show()

答案 1 :(得分: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,可能有效。我不确定我是否完全理解你的问题,但是如果你想在选择之后启用下一个选项并在此之后禁用选项,直到点击下一个选项,那么这将是你的票,如果它有效。

如果要动态添加(或删除)它们,您只需使用.after.nextAll方法添加并精确定位要删除的选择框。

更新:Whoopsie。有错误的选择器。

答案 2 :(得分: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() {,然后在获取XML后选择.next("select")将其附加到其中。

我会承认,我从未真正使用过Spry。我已经看到它使用了一点,似乎我可以做我需要使用jQuery。