events:
'click' : 'select'
在Mobile Safari上使用此事件时,触摸时会触发两次事件。这是一个已知的错误或我自己造成的事情吗?
我已将其更改为
events:
'touchstart' : 'select'
它的效果很好,但意味着它不再适用于普通的浏览器。
感谢您的任何信息。
答案 0 :(得分:16)
试试这段代码:
TouchView = Backbone.View.extend({
events: function() {
return MOBILE ?
{
"touchstart": 'select'
} :
{
"mousedown": 'select'
}
}
}
答案 1 :(得分:3)
我使用Modernizr来检测触摸设备并使用以下代码,这对我有用。
events :function(){
return Modernizr.touch ?
{
"touchstart #edit" : "openEdit",
}:
{
"click #edit" : "openEdit",
}
}
答案 2 :(得分:3)
我通过创建backbone.touch for Backbone来解决同样的问题,它会使用补丁Backbone.View来响应使用触摸设备时的触摸事件,或者在没有使用时定期点击事件。
您可以只包含源文件以使其转换Backbone.Views中的所有click
事件,或者您可以查看代码并自行实现。
答案 3 :(得分:2)
我定义了两种事件类型,它适用于移动设备和桌面设备:
events: {
'click' : 'select',
'touchstart' : 'select'
}
答案 4 :(得分:1)
我不熟悉Backbone,但也许可以尝试有条件地设置它?
if ('ontouchstart' in document.documentElement) {
// 'touchstart': 'select'
} else {
// 'click': 'select'
}
答案 5 :(得分:0)
我只是包含了jquery touchpunch库,就是这样。
答案 6 :(得分:0)
使用coffeescript,我会做以下事情,我现在找不到引入现代化器的理由,因为现在每个移动设备都是触摸设备,我的意思是什么时候你最后一次必须真正支持某些东西那不是吗?
window.isTouchDevice = (/android|webos|iphone|ipod|ipad|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()) )
events: ->
for k, v of this when /click/.test(k) and isTouchDevice
mobileKey = k.replace('click','touchstart')
events[ mobileKey ] = v
delete events[ k ]
return events
Coffeescript对于这些类型的列表推导非常好。
答案 7 :(得分:0)
这对我有用。
events:{
'click #edit':'select',
'touchstart #edit':'select'
},
select: function(e){
e.stopPropagation();
e.preventDefault();
console.log('open upload dialog ', e.type);
}
现在当你测试这个设备是否触摸e.type应该是touchstart并且只触发一次。 点击非触摸设备也是如此。 如果有人仍然在寻找一个简单的解决方案。