5

asp.net で折りたたみ可能なカスタム フィールドセット コントロールを作成しました。jquery を使用してトグル効果を追加します。コントロールは完全に機能しますが、updatepanel 内でフィールドセットを使用している場合、ポストバック後、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();

});
4

3 に答える 3

5

問題は、ライブ選択のための単純なセレクター以上のことをしていることです

api.jquery.comから 「.live() に送信する要素を見つけるために、DOM トラバーサル メソッドは完全にはサポートされていません。むしろ、selecton の直後に .live() メソッドを常に呼び出す必要があります」

于 2010-01-31T18:19:29.277 に答える
2
            if (obj.hasClass('collapsed')) { 
            obj.removeClass('collapsed').addClass('SmartFieldSetCollapsible'); }

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

最初にクラスを削除し、クラスが折りたたまれている場合は別のクラスを追加し、次に折りたたまれたクラスを削除します。システムの動作に影響するかどうかはわかりませんが、試してみる価値はあります。

.click (フィールドが更新されていない場合) を使用するだけで関数は機能しますか?

于 2010-01-31T18:05:28.760 に答える
1

トラバースが問題です。簡単な選択で解決できます。

var obj = $(this),
    obj.find("legend").addClass('SmartFieldSetCollapsible');
$('legend.SmartFieldSetCollapsible').live('click.collapsible', function(e){
于 2010-08-18T17:20:29.007 に答える