【问题标题】:.click() not working in iPad only, inside of backbone.js app.click() 仅适用于 iPad,在backbone.js 应用程序内部
【发布时间】:2013-03-08 22:04:51
【问题描述】:

我遇到了一个非常奇怪和令人沮丧的问题——我在我的主干.js 应用程序的视图中编写了一个 .click() 事件(第一次编写一个),它成功地在每个桌面浏览器中触发,但是它不适用于 iPad。

代码是这样的:

if (something) {
 $('a.link').click();
} else {
  // do something else
}

我不知道为什么会这样。我正在使用backbone.js,如果这意味着什么的话,还有backbone.touch.js。为此,我已经把头撞在墙上好几个小时了。有人可以帮忙吗?

【问题讨论】:

  • 你能确认这个代码行已经运行了吗? (例如通过 console.log)
  • 不熟悉backbone.touch.js,但它会为您将点击转化为触摸事件吗?
  • @SimonBoudrias 我可以确认它运行了,我之前和之后都警告过它似乎正在通过它
  • @kinakutabone.touch.js 合并点击和触摸事件,但(据我所知)仅适用于您在“事件”对象中声明的事件,所以我认为这不应该受到影响.这是链接github.com/nervetattoo/backbone.touch
  • 您是否有一个点击处理程序应该在触发该点击事件时触发?

标签: javascript jquery backbone.js backbone-views


【解决方案1】:

尝试使用自定义事件而不是模拟点击:

要在主干对象中触发自定义事件,只需触发它即可。例如,在您的模型中:

this.trigger('click:navitem');

然后,您在哪里侦听这些事件,例如在附加到该模型的视图中:

this.listenTo(this.model, 'click:navitem', doFunc);

其中 doFunc 是您的处理程序的名称。

这是一个jsfiddle 演示。该示例是人为设计的,因此它可能与您的应用程序的结构不匹配,但重点是演示触发和侦听自定义事件。在这个示例中,我只是在同一个视图中完成了所有操作,但事件触发的来源可以是模型或集合,只要您正在侦听这些事件的位置可以引用事件的发起者。它本质上是骨干网对 pub/sub 的实现,当然,可以使用 jquery、pubsub 或各种其他库在骨干网之外实现,但您可以从骨干网免费获得。

【讨论】:

  • 这太棒了!谢谢你把它变成小提琴。没有大忙(我将无法立即对其进行测试),但如果它有效,我肯定会立即接受您的回答!感谢您的帮助!
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2018-03-30
  • 2014-07-31
  • 2013-08-17
相关资源
最近更新 更多