Выпадающий список плагинов JQuery Cascade не обновляется

Я использую JQuery на основе Cascade плагин; возможно, он работает, но я обнаружил много проблем с ним.

Может кто уже сталкивался с этим плагином и может поможет.

Итак, я использую этот плагин для фильтрации местоположения

http://clip2net.com/clip/m12007/1246819525-clip-2kb.png (разорванное изображение)

местоположение

Вот мой код CS:

public JsonResult getChildren(string val)
    {
        if (val.IsNotNull())
        {
            int lId = val.ToInt();
            Cookie.Location = val.ToInt();
            var forJSON = from h in Location.SubLocationsLoaded(val.ToInt())
                          select new { When = val, Id = h.Id, Name = h.Name, LocationName = h.LocationType.Name };
            return this.Json(forJSON.ToArray());
        }
        else
            return null;
    }

Вот мой JS-код:

<script type="text/javascript">
function commonMatch(selectedValue) {
    $("#selectedLocation").val(selectedValue);
    return this.When == selectedValue;
};
function commonTemplate(item) {
    return "<option value='" + item.Id + "'>" + item.Name + "</option>";
};


$(document).ready(function() {
    $("#chained_child").cascade("#Countries", {
        ajax: {
            url: '/locations/getChildren'
        },
        template: commonTemplate,
        match: commonMatch
    }).bind("loaded.cascade", function(e, target) {
        $(this).prepend("<option value='empty' selected='true'>------[%Select] Län------</option>");
        $(this).find("option:first")[0].selected = true;
    });
    $("#chained_sub_child").cascade("#chained_child", {
        ajax: {
            url: '/locations/getChildren'
        },
        template: commonTemplate,
        match: commonMatch
    }).bind("loaded.cascade", function(e, target) {
        $(this).prepend("<option value='empty' selected='true'>------[%Select] Kommun------</option>");
        $(this).find("option:first")[0].selected = true;
    });
    $("#chained_sub_sub_child").cascade("#chained_sub_child", {
        ajax: {
            url: '/locations/getChildren'
        },
        template: commonTemplate,
        match: commonMatch
    }).bind("loaded.cascade", function(e, target) {
        $(this).prepend("<option value='empty' selected='true'>------[%Select] Stad------</option>");
        $(this).find("option:first")[0].selected = true;

    });

});

I added one condition to jquery.cascade.ext.js

if (opt.getParentValue(parent) != "empty")
            $.ajax(_ajax);

Чтобы предотвратить запрос Ajax без выбранного значения, но я столкнулся с проблемой, когда я сбрасываю выделение в первом поле, 3D-окно и ниже не обновляются: WTF?

И второй вопрос: я хотел бы знать, куда лучше всего внедрить свою собственную функцию, которая будет что-то делать, с одним требованием - мне нужно знать, что все коробки закончили работу.


person omoto    schedule 05.07.2009    source источник


Ответы (1)


Проблема с исходным кодом плагина заключается в том, что он не запускает событие изменения после того, как манипулирует раскрывающимся списком.

Кроме того, мне нравится думать об этой проблеме с точки зрения «зависимости», а не «каскадирования». Я попытался создать простой плагин и демо-страницу, которая показывает, как все это работает.

Демонстрация: http://jsbin.com/unope

Код: http://jsbin.com/unope/edit

Позвольте мне объяснить, что я сделал. Я создал плагин с именем «зависимый», который позволяет вам связать зависимость для раскрывающегося списка.

e.g.

$('#dropDown2').dependent({ 
                            dependency : 'dropDown1',
                            values : getValues
                        });

Приведенный выше код предполагает, что dropDown2 зависит от dropDown1, поэтому всякий раз, когда значение dropDown1 изменяется, он вызывает вашу функцию getValues ​​(передавая ей dropDown1). Вы должны вернуть соответствующие значения из вашей функции getValues, и она заполнит их в dropDown2.

Имейте в виду, что этот код не является общим, я быстро написал его, чтобы продемонстрировать концепцию. Вам придется настроить его дальше, чтобы достичь желаемого результата.

Дайте знать, если у вас появятся вопросы.

person SolutionYogi    schedule 06.07.2009
comment
SolutionYogi, я пытаюсь получить данные динамически через php/mysql в функции getValues, используя $.ajax. Я возвращаю несколько строк output.push, но не могу заставить их вставить в выходной массив. Любые идеи? Спасибо, - Дэн - person teamdane; 13.05.2010