0

我的代码似乎有缺陷,我在里面设置了两个具有相同代码的函数。我可以将它们合二为一吗?

// 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() {..})。您选择哪个主要是个人喜好,它们实际上是相同的。

一个示例(使用函数表达式),继您的问题之后:

$('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 回答