2016-03-07 67 views
1

我正在用这个撕掉我的头发。我有一个功能,我可以加载准备,单击,但不是当我把它放在绑定事件处理程序。放置在绑定事件处理函数中时未定义的函数

// these work 
$(document).ready().calHeader(); 
$(".prevMonth").click().calHeader(); 

// this doesn't work 
$(".prevMonth").bind("click", calHeader); 

我试图让最后一个工作,因为我不希望函数在点击之前运行。来自几个回答问题的解决方案表示要以第三种方式进行。但我不断收到这个错误在Chrome控制台:

Uncaught ReferenceError: calHeader is not defined(anonymous function) @ override.js:101 

为什么前两个工作正常,但最后一个不是?我错过了什么/没有从解释中理解?真的会感激一些方向!

+0

'calHeader'做了什么?看起来奇怪它适用于任何元素 – charlietfl

+0

哦,对不起,我应该提到calHeader是我创建的函数/插件(?)。它不会返回任何内容 - 只需进行一些计算,然后更改背景图像即可。但我只想在单击某个特定元素时运行calHeader。相反,现在,所有我已经能够工作的是在整个页面加载时运行calHeader。 – starchy

+1

好像你是用'$ .fn.calHeader = func ....'做成的,只需要'$ .calHeader = func ...'。然后使用'$ .calHeader()'或'$(“。prevMonth”)。on(“click”,$ .calHeader);' – charlietfl

回答

1

因为你的插件似乎并不依赖于传递给它的任何选择的元素它似乎它只不过是一个utlity功能更

而不是使用$.fn.calHeader = function你可以使用$.calHeader= function,做创建它的:

$(".prevMonth").on("click", $.calHeader); 
1

.calHeader()因为calHeader函数是jQuery对象的一个​​属性(即它是由插件定义的jQuery方法),而其他jQuery方法返回一个jQuery对象,因此您可以像这样链接方法。它不是一个变量名,所以你不能直接调用它或者将它作为函数参数传递。

这是你可以做$(".prevMonth").click()但不是click()的原因。

相关问题