Как включить / создать элементы на лету - PullRequest
1 голос
/ 26 апреля 2010

Я использую комбинацию PHP, jQuery и Spry для обслуживания ряда списков, в которых пользователь сначала выбирает тип транспортного средства, затем марку, затем модель и, наконец, конкретную модель.

Все мои списки (SELECT) работают нормально, и они корректно обновляются с использованием элементов Spry. Каждый список заполнен из другого набора данных Spry XML, и это моя проблема.

Если я предоставляю пользователю все четыре списка, сценарий должен пойти и извлечь все четыре лота XML, чтобы заполнить все четыре списка, что занимает несколько секунд. То, что я хочу сделать, это создать / включить списки по порядку, поэтому при выборе пользователем первого списка создается / включается второй, при выборе второго второй создается / включается третий ... и так на.

Установка отключенного атрибута не годится, потому что скрипт уже извлек XML до того, как это будет обработано.

Есть идеи ??

1011 * Si *

ОБНОВЛЕНИЕ - Извините, ребята, не думаю, что я прояснил мою проблему.

В верхней части моего сценария я объявляю четыре переменные набора данных Spry XML, каждая из которых отключается (когда требуется) и выполняет сложный SOAP-запрос к службе, затем эта служба возвращает кусок XML. Каждый запрос зависит от последнего, поэтому, как только пользователь выбрал тип транспортного средства, второй набор данных обновляется, чтобы дать точный список производителей. Когда они выбирают производителя, третий список обновляется, чтобы дать точный список моделей для этого производителя. Когда они выбирают модель, список производных моделей обновляется для этой модели (четвертый список).

Далее по моему сценарию у меня есть четыре SELECT, каждый из которых заполнен данными из запросов spry. Теперь пользователь должен выбрать нужную опцию из каждого списка по очереди, чтобы получить правильную модель в последнем окне. Что я хочу сделать - это заполнить ТОЛЬКО первое поле при создании страницы, затем заполнить (или создать ??) второе, третье и четвертое поля, когда пользователь выбирает желаемое значение в каждом из них, как это происходит на веб-сайте Autotrader ( www.autotrader.co.uk).

Как я уже говорил в первоначальной публикации, я не могу использовать attr 'disabled' или даже функции jQuery show () и hide (), поскольку они не срабатывают, пока ПОСЛЕ того, как все четыре набора данных не будут извлечены и заполнены в ВЫБОР. Мне нужно что-то, что в идеале создает элементы с нуля, как и когда это необходимо, чтобы вначале не получалось четыре партии XML ...

Надеюсь, это прояснит

Ответы [ 3 ]

0 голосов
/ 26 апреля 2010
$('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. Неправильные селекторы.

0 голосов
/ 26 апреля 2010

Я не уверен, что знаю, о чем вы спрашиваете, но похоже, что вы ищете что-то вроде:

$("#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.

0 голосов
/ 26 апреля 2010

Вместо того, чтобы отключать их, почему бы просто не скрыть / показать с помощью jQuery? .hide() .show(),

...