【问题标题】:Undefined function when placing in bind event handler放入绑定事件处理程序时未定义的函数
【发布时间】:2016-03-07 17:31:48
【问题描述】:

我用这个把头发扯掉了。我有一个函数,我可以在点击时加载它,但当我将它放在绑定事件处理程序中时却不能。

// 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

为什么前两个可以正常工作,而最后一个不行?我从解释中遗漏/不理解什么?真的很感激一些方向!

【问题讨论】:

  • calHeader 是做什么的?似乎很奇怪它适用于任何元素
  • 似乎您使用 $.fn.calHeader = func.... 完成了它,并且只需要 $.calHeader = func... 。然后使用$.calHeader()$(".prevMonth").on("click", $.calHeader); 调用它

标签: jquery events event-handling bind


【解决方案1】:

由于您的插件似乎不依赖于传递给它的任何选择器元素,因此它似乎只不过是一个实用函数

您可以使用$.calHeader= function 并执行以下操作,而不是使用$.fn.calHeader = function 创建它:

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

【讨论】:

    【解决方案2】:

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

    这与您可以使用$(".prevMonth").click() 但不能使用click() 的原因相同。

    【讨论】:

      猜你喜欢
      • 2019-05-27
      • 2013-02-02
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多