我的代码似乎有缺陷,我在内部使用相同的代码设置两个函数。我可以将它们组合成一个吗?
// 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();
});
答案 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);
});