0

我正在尝试将 preventDefault 应用于 iBooks 中的 div 以创建一个区域,在该区域中没有用于翻页的触摸/拖动事件。到目前为止,我只尝试阻止触摸事件,但它不起作用。我在这里的实现可能完全错了:

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);

任何关于为什么这不会阻止触摸事件的提示将不胜感激。

4

2 回答 2

2

我遇到了同样的问题。不知道为什么addEventListener不为我工作,但bind做了。

var events = 'click touchmove touchstart touchend touchcancel';
$('#area').bind(events, function(e) {
    e.preventDefault();
}
于 2014-01-24T17:58:07.280 回答
-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);

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

于 2012-05-08T21:59:33.487 回答