Javascript jQuery:调用函数两次
我尝试运行一个函数两次。在页面加载时单击一次,然后再次单击。不知道我做错了什么。这是我的密码:Javascript jQuery:调用函数两次,javascript,jquery,Javascript,Jquery,我尝试运行一个函数两次。在页面加载时单击一次,然后再次单击。不知道我做错了什么。这是我的密码: $('div').each(function truncate() { $(this).addClass('closed').children().slice(0,2).show().find('.truncate').show(); }); $('.truncate').click(function() { if ($(this).parent().hasClass('close
$('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();
}
});
问题在第13行,我调用truncate()代码>功能第二次。知道它为什么不起作用吗
编辑这里的jsFiddle:这是一个命名函数文本
名称仅在函数范围内可见。
因此,truncate
在处理程序之外不存在
相反,创建一个普通函数并将其传递给each()
:
这是一个命名函数文本
名称仅在函数范围内可见。
因此,truncate
在处理程序之外不存在
相反,创建一个普通函数并将其传递给each()
:
你收到了什么错误信息
您应该创建函数,然后根据需要调用它
定义函数
function truncate(){
$('div').each(function(){
});
}
然后调用函数
truncate();
你收到了什么错误信息
您应该创建函数,然后根据需要调用它
定义函数
function truncate(){
$('div').each(function(){
});
}
然后调用函数
truncate();
另一种方法是建立并触发自定义事件:
$('div').on('truncate', function() {
$(this).......;
}).trigger('truncate');
然后,在其他需要相同操作的地方,再次触发事件
要截断所有div,请执行以下操作:
$('div').trigger('truncate');
类似地,您可以只截断一个特定的div:
$('div#myDiv').trigger('truncate');
唯一的先决条件是已附加自定义事件处理程序,因此
$('p').trigger('truncate');
因为尚未为p
元素建立truncate处理程序,所以不会执行任何操作。另一种方法是建立并触发自定义事件:
$('div').on('truncate', function() {
$(this).......;
}).trigger('truncate');
然后,在其他需要相同操作的地方,再次触发事件
要截断所有div,请执行以下操作:
$('div').trigger('truncate');
类似地,您可以只截断一个特定的div:
$('div#myDiv').trigger('truncate');
唯一的先决条件是已附加自定义事件处理程序,因此
$('p').trigger('truncate');
因为还没有为p
元素建立truncate处理程序,所以什么也做不了。我知道已经有了一个公认的答案,但我认为最好的解决方案应该是一个插件,它似乎符合OP想要的精神(能够调用$('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();
}
});
我知道已经有了一个公认的答案,但我认为最好的解决方案应该是一个插件——它似乎符合OP想要的精神(能够调用$('div')。截断)。并使代码更加清晰
(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();
}
});
请将您的html添加到一个JSFIDDLE中,然后在另一个JSFIDDLE中定义函数。当您在第13行调用它时,它无法“看到”该函数。在两个jquery块之外定义函数,并从每个jquery块调用它。如果在另一个jquery块中定义函数,请将html添加到一个jsfiddle中。当您在第13行调用它时,它无法“看到”该函数。在两个jquery块之外定义函数并从每个块调用它。他还需要在这里修复调用>$('div')。truncate()
只是truncate()
Hmm。尝试了()但似乎不起作用。也许我还有别的错误,但我希望现在可以通过再次单击.truncate
来隐藏内容。@colindunnn:truncate()
没有这个。您需要编写$(…)。每个(截断)
他还需要修复这里的调用>>$('div')。truncate()
只是truncate()
Hmm。尝试了()但似乎不起作用。也许我还有别的错误,但我希望现在可以通过再次单击.truncate
来隐藏内容。@colindunnn:truncate()
没有这个。您需要编写$(…)。每个(truncate)
这似乎更适合于插件,因此OP可以按预期调用$('div')。truncate()
。这当然是另一种方法-更灵活(可应用于任意选择的元素),但更难编写(插件很难正确编写)。这似乎更适合于插件,因此OP可以按照他们的意图调用$('div')。truncate()
。这当然是另一种方法-更灵活(可应用于任意选择的元素),但更难编写(插件很难正确编写)。如果您从truncate的单击处理程序调用此方法,您将截断所有部分,而不仅仅是单击的部分如果您从click handler调用此函数来截断,您将截断所有部分,而不仅仅是单击的部分