0

私のコードには欠陥があるようです。同じコードを内部に持つ 2 つの関数を設定しています。それらを1つに結合できますか?

// remove sets
$('body').on("click", "span.remove", function() {

    var self  = $(this),
        total = self.parents('ul').children('li').size(); // grab total number of li's

    // remove (set) li if total greater than 1, else remove exercise
    if(total > 1)
        self.parent('li').fadeOut('slow', function() {

            // remove clicked .li and reset list order
            $(this).remove();
            reset();

        });

    else
        self.parents('section').fadeTo('slow', 0.33).slideUp('slow', function() {

            // remove clicked .li and reset list order
            $(this).remove();
            reset();

        });

});

次のようなことは可能ですか:

if(total > 1)
    var f = self.parent('li').fadeOut('slow', function()

else
    var f = self.parents('section').fadeTo('slow', 0.33).slideUp('slow', function()

f {

    // remove clicked .li and rest list order
    $(this).remove();
    reset();

});
4

2 に答える 2

1

秘訣は、無名関数の代わりに名前付き関数を作成することです。名前付き関数は、他のメソッドへのパラメーターとしても含めて、参照によって渡すことができます。これを行うには、式 ( function someName(){..}) または代入 ( var someName = function() {..}) の 2 つの方法があります。どちらを選択するかは主に個人的な好みであり、事実上同じです。

以下の質問に続く例(関数式を使用):

$('body').on("click", "span.remove", function() {

    function removeAndReset() {
            // remove clicked .li and reset list order
            $(this).remove();
            reset();
    }

    var self  = $(this),
        total = self.parents('ul').children('li').size(); // grab total number of li's

    // remove (set) li if total greater than 1, else remove exercise
    if(total > 1)
        self.parent('li').fadeOut('slow', removeAndReset);

    else
        self.parents('section').fadeTo('slow', 0.33).slideUp('slow', removeAndReset);

});
于 2013-01-18T15:01:02.640 に答える
0
$('body').on("click", "span.remove", function() {

    var self  = $(this),
        total = self.parents('ul').children('li').size(); // grab total number of li's

    function remove() {
        $(this).remove();
        reset();
    }
    // remove (set) li if total greater than 1, else remove exercise
    if(total > 1)
        self.parent('li').fadeOut('slow', remove);

    else
        self.parents('section').fadeTo('slow', 0.33).slideUp('slow', remove);

});
于 2013-01-18T15:01:01.500 に答える