Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:调用函数两次_Javascript_Jquery - Fatal编程技术网

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调用此函数来截断,您将截断所有部分,而不仅仅是单击的部分