jquery手风琴通过ajax加载

时间:2013-01-29 11:20:24

标签: jquery ajax accordion

我在容器里装了一把手风琴:

<div id="address_results"></div>

现在我通过 ajax 调用填写 html (手风琴)。它工作正常但只能通过第一个 ajax 调用。通过第二,第三等呼叫,手风琴的动画不起作用。

// Ajax request
        $(this).submit(function() {
            var postal = $(o.postalDiv).val();

            $.getJSON(o.url,{ action: o.action, id: o.id, postal: postal } , function(json) {
                var result = json.content;
                var addresses = result['addresses'];
                var strXML = result['xml'];

                outputHtml(addresses);

            });
            return false;
        });

        // Ajax request success
        function outputHtml(addresses) {

            $(o.resultsDiv).html(addresses);

            // Generate the accordion
            $(o.resultsDiv).accordion({

                autoHeight: false,
                header:'div.toggler',
                active: false,
                collapsible: true
            });

在我填写手风琴前删除/附加div

$('#addresses_results').remove();
$('#reswrapper').append('<div id="address_results"></div>');

然后它工作正常。但这可能是正确的方法吗?

(对不起我的英文,不是我的母语) 谢谢!

2 个答案:

答案 0 :(得分:1)

尝试:

 $('#addresses_results').accordion('destroy').accordion();

答案 1 :(得分:1)

以下行不起作用,因为通过第一次ajax调用,手风琴不存在。

$('#addresses_results').accordion('destroy').accordion();

解决方案是检查手风琴是否已经存在:

 if ($(o.resultsDiv).hasClass('ui-accordion')) {
     $(o.resultsDiv).accordion('destroy');
  }

整个解决方案:

    (function ($) {

    $.fn.address = function (options) {
        var defaults = {
            url:           '/ajax.php',
            action:        'fmd',
            id:             0,
            resultsDiv:    '#address_results',
            postalDiv:     '#address_postal'
        };
        var o = $.extend(defaults,options);

        // Ajax request
        $(this).submit(function() {
            var postal = $(o.postalDiv).val();

            $.getJSON(o.url,{ action: o.action, id: o.id, postal: postal } , function(json) {
                var result = json.content;
                var addresses = result['addresses'];
                var strXML = result['xml'];

                outputHtml(addresses);

            });
            return false;
        });

        // Ajax request success
        function outputHtml(addresses) {

            $(o.resultsDiv).html(addresses);

            // Check if the accordion already exist. if so destroy it
            if ($(o.resultsDiv).hasClass('ui-accordion')) {
                $(o.resultsDiv).accordion('destroy');
            }

            // Generate the accordion
            $(o.resultsDiv).accordion({
                autoHeight: false,
                header:'div.toggler',
                active: false,
                collapsible: true
            });
        }

    };
})(jQuery);

谢谢!