代码改变世界

jQuery Accordion 1.6 event事件使用方法

2012-09-21 10:50  Fred-Xu  阅读(1666)  评论(0编辑  收藏  举报

由于公司老的网站系统都是使用的jquery.accordion-1.6,而现有accordion已经升到版本1.8了,文档也都是1.8的,event事件有chage, changestart, create三个,本以为1.6版本也适用change和changestart事件,结果测试发现根本无法trigger这个事件,查看了下1.6的文档

有这么一段代码

$(".ui-accordion").bind("accordionchange", function(event, ui) {
  ui.options // options used to intialize this widget
  ui.newHeader // jQuery, activated header
  ui.oldHeader // jQuery, previous header
  ui.newContent // jQuery, activated content
  ui.oldContent // jQuery, previous content
});

试了一下还是没法trigger到,好吧,开始看accordion的源码...

function completed(cancel) {
        // if removed while animated data can be empty
        if (!$.data(this, "ui-accordion")) return;
        var instance = $.data(this, "ui-accordion");
        var options = instance.options;
        options.running = cancel ? 0 : --options.running;
        if (options.running) return;
        if (options.clearStyle) {
            options.toShow.add(options.toHide).css({
                height: "",
                overflow: ""
            });
        }
        $(this).triggerHandler("change.ui-accordion", [options.data], options.change);
    }

绑定的是change.ui-accordion而非accordionchange,改下可以work了:

$('#gameList').bind('change.ui-accordion', function (event, ui) {
                var h;
                ui.newContent.find('.gameAnswers').each(function (i) {
                    if (i == 0)
                        h = $(this).height();
                    else {
                        if (h < $(this).height())
                            h = $(this).height();
                    }
                }); 
                ui.newContent.height(h).slideDown();
            });

吐槽下:还是读源码可以解决问题,但是需要有耐心...