JQuery Live()不起作用

时间:2010-01-31 17:56:33

标签: asp.net jquery live

我在asp.net中制作了一个自定义的可折叠字段集控件。我使用jquery来添加切换效果。该控件工作得很好,但是当我在更新面板中使用我的fieldsets时,由于document.ready,因此回发我松开了我的jquery逻辑。

现在我已经阅读了关于Jquery的新Live()函数,但我没有让它工作。我做错了什么?有人有答案吗?

非常感谢

我的Jquery代码是:

$(document).ready(function() {

    $.fn.collapse = function(options) {
        var defaults = { closed: false }
        settings = $.extend({}, defaults, options);

        return this.each(function() {
            var obj = $(this);

            obj.find("legend").addClass('SmartFieldSetCollapsible').live("click", function() {


                if (obj.hasClass('collapsed')) { 
                obj.removeClass('collapsed').addClass('SmartFieldSetCollapsible'); }

                $(this).removeClass('collapsed');

                obj.children().next().toggle("slow", function() {

                    if ($(this).is(":visible")) {

                        obj.find("legend").addClass('SmartFieldSetCollapsible');
                        obj.removeAttr("style");
                        obj.css({ padding: '10px' });
                        obj.find(".imgCollapse").css({ display: 'none' });
                        obj.find(".imgExpand").css({ display: 'inline' });

                    }
                    else {

                        obj.css({ borderLeftColor: 'transparent', borderRightColor: 'transparent', borderBottomColor: 'transparent', borderWidth: '1px 0px 0px 0px', paddingBottom: '0px' });
                        obj.find(".imgExpand").css({ display: 'none' });
                        obj.find(".imgCollapse").css({ display: 'inline' });

                    }
                });
            });

            if (settings.closed) {
                obj.addClass('collapsed').find("legend").addClass('collapsed');
                obj.children().filter("p,img,table,ul,div,span,h1,h2,h3,h4,h5").css('display', 'none');
            }
        });
    };


});


$(document).ready(function() {

$("fieldset.SmartFieldSetCollapsible").collapse();

});

3 个答案:

答案 0 :(得分:5)

问题是你做的更多只是一个简单的选择器,你的实时选择

来自api.jquery.com “查找要发送到.live()的元素并不完全支持DOM遍历方法。相反,应始终在selecton之后直接调用.live()方法”

答案 1 :(得分:2)

            if (obj.hasClass('collapsed')) { 
            obj.removeClass('collapsed').addClass('SmartFieldSetCollapsible'); }

            $(this).removeClass('collapsed');

首先,如果类已折叠,则要删除该类并添加另一个类,然后删除该类折叠。我不知道它是否会影响系统的工作,但值得尝试。

如果您只使用.click(当字段未更新时),该功能是否有效?

答案 2 :(得分:1)

遍历是个问题。您可以通过简单的选择来解决它。

var obj = $(this),
    obj.find("legend").addClass('SmartFieldSetCollapsible');
$('legend.SmartFieldSetCollapsible').live('click.collapsible', function(e){