Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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
jQuery自定义函数并向其传递参数_Jquery - Fatal编程技术网

jQuery自定义函数并向其传递参数

jQuery自定义函数并向其传递参数,jquery,Jquery,我有一行图像,当单击其中一个图像时,它会展开,同时也会缩小可能被放大的任何其他图像。如果你点击放大的图像,它会自动缩小 我收到“未定义收缩”错误消息。提前谢谢 $.fn.grow = function(size,rate) { $(this).addClass('click').animate({'height': size}, rate); } $.fn.shrink = function(size,rate) {

我有一行图像,当单击其中一个图像时,它会展开,同时也会缩小可能被放大的任何其他图像。如果你点击放大的图像,它会自动缩小

我收到“未定义收缩”错误消息。提前谢谢

        $.fn.grow = function(size,rate) {
            $(this).addClass('click').animate({'height': size}, rate);
        }
        $.fn.shrink = function(size,rate) {
            $('img').removeClass('click').animate({'height': size}, rate);
        }

        $(document).ready(function() {
            $('#gallery img').click(function() {
                var $this = $(this);
                ($this.hasClass('click')) ? $this.shrink('139', '200') : $this.shrink('139', '200').grow('700', '200');
            });
        });

我收到了一个不同的例外

未捕获的TypeError:无法调用未定义的方法“grow”

您正试图链接这些方法(如果喜欢Crockfordian术语,也可以使用级联),但两个自定义函数都不会返回jQuery对象


你需要让他们
返回
一些东西,通常是
这个
。在jQuery自定义函数中,
已经是一个jQuery对象,因此无需再次包装它。

如果您像这样使用$.fn.extend:

$.fn.extend({
    shrink: function() {$(this).doSth()},
    grow: function() {$(this).doSth()}
});
您将能够将收缩和增长方法应用于任何jQuery包装的对象,例如

$('img').shrink();

希望有帮助

为什么要声明:var$this=$(this);我想说,这会混淆JQuery,因为在变量名中使用$selector。我不能100%确定这是否是允许的,这是否是原因。但是,请尝试使用$(this),或者以不同的方式声明变量。。比如var me=$(这个)@Jules变量的前导
$
在JavaScript中是有效的。事实上,许多人更倾向于将其作为一个指标,表明该变量实际上是一个jQuery对象。+1,尽管对于
shrink
方法,我想您应该返回
this
,以便链接在原始元素上继续。。。。另外,
grow
方法可以执行
this.addClass('click')
。不需要像问题中那样包装它。(看在上帝的份上,我知道你知道。);o)