2

関数を 2 回実行しようとしています。ページの読み込み時に 1 回、クリック時にもう一度。私が間違っているのかわかりません。これが私のコードです:

$('div').each(function truncate() {
    $(this).addClass('closed').children().slice(0,2).show().find('.truncate').show();
});

$('.truncate').click(function() {

    if ($(this).parent().hasClass('closed')) {
        $(this).parent().removeClass('closed').addClass('open').children().show();
    }

    else if ($(this).parent().hasClass('open')) {
        $(this).parent().removeClass('open').addClass('closed');
        $('div').truncate();
        $(this).show();
    }

});

問題は、truncate();関数をもう一度呼び出す 13 行目です。なぜそれが機能しないのですか?

ここで jsFiddle を編集します: http://jsfiddle.net/g6PLu/

4

4 に答える 4

4

これは名前付き関数リテラルです。

名前は、関数のスコープ内でのみ表示されます。
したがって、truncateハンドラーの外部には存在しません。

each()代わりに、正規関数を作成して:に渡します。

function truncate() { ...}

$('div').each(truncate);
于 2012-05-18T21:41:42.693 に答える
0

エラーメッセージは何ですか?

関数を作成し、必要に応じて呼び出す必要があります

関数を定義する

function truncate(){
  $('div').each(function(){

  });
}

次に、関数を呼び出します

truncate();
于 2012-05-18T21:48:45.380 に答える
0

すでに受け入れられている回答があることは知っていますが、最善の解決策はプラグインhttp://jsfiddle.net/g6PLu/13/であると思います$('div').truncate。そして、よりクリーンなコードになります

(function($) {
    $.fn.truncate = function() {
        this.addClass('closed').children(":not('.truncate')").hide().slice(0,2).show();
    };
    $.fn.untruncate = function() {
        this.removeClass('closed').children().show();
    };                
})(jQuery);

$('div').truncate();

$('.truncate').click(function() {
  var $parent = $(this).parent();
  if ($parent.hasClass('closed')) {
    $parent.untruncate();
  } else {
    $parent.truncate();
  }
});
于 2012-05-24T17:33:26.610 に答える
0

もう 1 つの方法は、カスタム イベントを確立してからトリガーすることです。

$('div').on('truncate', function() {
    $(this).......;
}).trigger('truncate');

次に、同じアクションが必要な場所で、イベントを再度トリガーします。

すべての div を切り捨てるには:

$('div').trigger('truncate');

同様に、特定の div を 1 つだけ切り詰めることができます。

$('div#myDiv').trigger('truncate');

唯一の前提条件は、カスタム イベント ハンドラーがアタッチされていることです。

$('p').trigger('truncate');

p要素に対して切り捨てハンドラが確立されていないため、何もしません。

于 2012-05-18T23:13:36.290 に答える