在jQuery对象上调用javascript函数
我试图在我创建的jQuery元素上调用javascript函数,但在函数上运行时似乎没有调用该函数。该函数在单独运行时工作,但在另一个jQuery对象上运行时不工作。以下是函数:在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"); /*$
$(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");
};