jQuery:设置函数调用的字符串

时间:2013-01-18 14:53:18

标签: jquery

我的代码似乎有缺陷,我在内部使用相同的代码设置两个函数。我可以将它们组合成一个吗?

// 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();

});

2 个答案:

答案 0 :(得分: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);

});

答案 1 :(得分: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);

});