events:
'click' : 'select'
在Mobile Safari上使用该事件时,触摸时会触发两次。这是一个已知的错误还是我自己造成的? 我已经将其更改为:
events:
'touchstart' : 'select'
它的效果很好,但这意味着它将不再在普通浏览器中工作。
感谢任何信息。
events:
'click' : 'select'
events:
'touchstart' : 'select'
它的效果很好,但这意味着它将不再在普通浏览器中工作。
感谢任何信息。
试试这段代码:
TouchView = Backbone.View.extend({
events: function() {
return MOBILE ?
{
"touchstart": 'select'
} :
{
"mousedown": 'select'
}
}
}
events :function(){
return Modernizr.touch ?
{
"touchstart #edit" : "openEdit",
}:
{
"click #edit" : "openEdit",
}
}
click
事件,或者查看代码并自行实现。我定义了这两种事件类型,它们在我的手机和桌面上都可以使用:
events: {
'click' : 'select',
'touchstart' : 'select'
}
我不熟悉Backbone,但也许可以尝试有条件地设置它?
if ('ontouchstart' in document.documentElement) {
// 'touchstart': 'select'
} else {
// 'click': 'select'
}
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 更适合这种类型的列表推导式。
这对我有用。
events:{
'click #edit':'select',
'touchstart #edit':'select'
},
select: function(e){
e.stopPropagation();
e.preventDefault();
console.log('open upload dialog ', e.type);
}
现在当您测试此功能时,如果设备支持触摸,则 e.type 应为 touchstart 并且只触发一次。 对于无触摸设备上的单击也是同样如此。 如果仍有人正在寻找这个简单的解决方案,请注意。