2012-05-08 18 views
0

我试图将preventDefault应用于iBooks中的div,以创建一个区域,其中没有任何翻页事件可用于翻页。到目前为止,我只是试图阻止触摸事件,但它不起作用。我在这里的实现可能完全错误:ibooks中的event.preventDefault():任何人都可以解释为什么这不起作用吗?

var area = document.getElementById('area'); 
function touchStart(event) { 
    event.preventDefault(); 
} 
function touchMove(event) { 
    event.preventDefault(); 
} 
function touchEnd(event) { 
    event.preventDefault(); 
} 
function touchCancel(event) { 
    event.preventDefault(); 
} 

area.addEventListener("touchstart", touchStart, false); 
area.addEventListener("touchmove", touchMove, false); 
area.addEventListener("touchend", touchEnd, false); 
area.addEventListener("touchcancel", touchCancel, false); 

任何暗示,为什么这不能防止触摸事件将受到感谢。

+0

我觉得我可能不会正确理解这些触摸事件是如何工作的。 – chrxr

+0

我对iBooks不熟悉,但我的猜测是,这些操作实际上不是默认操作,而是由其他事件处理程序处理。如果您停止传播(使用'event.stopPropagation();'),那可能会解决问题。 – lonesomeday

回答

-2

你很近。为了将事件传递给函数,您实际上必须使用匿名函数。

我想你应该也不用担心创建多个函数,而只需调用匿名函数中的一行。

var area = document.getElementById('area'); 

area.addEventListener("touchstart", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchmove", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchend", function(event) {event.preventDefault()}, false); 
area.addEventListener("touchcancel", function(event) {event.preventDefault()}, false); 

如果你还想去具有事件侦听器中调用函数它看起来像这样的路线:

var area = document.getElementById('area'); 

function myTouchStart(myEvent) { 
    myEvent.preventDefault(); 
} 

area.addEventListener("touchstart", function(event) {myTouchStart(event)}, false); 

的想法是,事件监听器有一个匿名函数,你比通过调用你的函数。使用匿名函数,您可以将事件对象声明为传递给匿名函数并发送给您自己的。

+0

这是错误的。 '函数(e){x(e);}'完全等同于'x'。 OP的on ...函数应该完美调用。所以问题依然存在:如何从触摸中抑制默认的iBooks动作。 – 2012-10-26 01:07:22

2

我遇到了同样的问题。不知道为什么addEventListener不适合我,但bind没有。

var events = 'click touchmove touchstart touchend touchcancel'; 
$('#area').bind(events, function(e) { 
    e.preventDefault(); 
} 
相关问题