在jQuery对象上调用javascript函数

在jQuery对象上调用javascript函数,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我试图在我创建的jQuery元素上调用javascript函数,但在函数上运行时似乎没有调用该函数。该函数在单独运行时工作,但在另一个jQuery对象上运行时不工作。以下是函数: $(document).ready(function() { var $Chart = $('#Chart'); /* returns true if some Expand element is open */ function closeExpand() { alert("Hello"); /*$

我试图在我创建的jQuery元素上调用javascript函数,但在函数上运行时似乎没有调用该函数。该函数在单独运行时工作,但在另一个jQuery对象上运行时不工作。以下是函数:

$(document).ready(function() {
var $Chart = $('#Chart');
/*
 returns true if some Expand element is open
*/
function closeExpand() {
    alert("Hello");
    /*$(this).css("background-color", "black");*/
};
});
它在单独调用时工作:

但在另一个jQuery对象上调用时不会:


我在这里做错了什么,如何在另一个对象上调用javascript函数?

您可以扩展jquery.fn(jquery原型)来添加新函数,以便可以从jquery对象访问它:

尝试:

您的函数
closeExpand
当前未与jquery对象原型关联,通过将其添加到其原型中,您可以使用jquery对象调用它

或者你可以:

$('.ChartLink').click(function() {
    closeExpand.call($(this));
});


顶级解决方案有效,谢谢!我仍然对“$.fn.closeExpand”语法到底是如何工作的有点困惑,您能解释一下为什么与我所做的相反,这种语法是必要的吗?(我将在4分钟内接受您的回答,只要我能够)@Tim
$。fn
是jquery prototype的别名,因此您只需将函数添加为jquery prototype的一部分,以便您创建的任何jquery对象都可以访问此函数。对于原始代码,它与jquery原型没有关联,这就是为什么不能像其他常规jquery对象一样从jquery object.ahh调用它的原因。非常感谢:)@Tim是的,它们只是javascript中的任何其他对象。而且默认情况下,上下文将是jquery对象,因此您不必冗余地执行$(此操作)。我的代码的第二个版本做了类似的事情,但它只是将函数上下文设置为作为调用参数传入的对象<代码>返回此来自jquery函数通常很重要,因为它允许您进行链接。i、 例如,您可以执行
$Chart.closeExpand().fadeout(3000)
仅当
$.fn.closeExpand=
$Chart.closeExpand()处于相同的上下文中这里。如果后者在函数中使用:
TypeError:$Chart.closeExpand不是函数,则显示
。如果我编辑你的演示相应的工作。困惑的
$('.ChartLink').click(function() {
    $Chart.closeExpand();
    });
});
$.fn.closeExpand = function() {
   this.css("background-color", "black");
   return this; //for chaining
};
$Chart.closeExpand();
$('.ChartLink').click(function() {
    closeExpand.call($(this));
});
function closeExpand() {
   this.css("background-color", "black");
};