2012-05-08 51 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(); 
} 
相關問題