Javascript ibooks中的event.preventDefault():有人能解释为什么这不是';不行吗?

Javascript ibooks中的event.preventDefault():有人能解释为什么这不是';不行吗?,javascript,ios,preventdefault,ibooks,Javascript,Ios,Preventdefault,Ibooks,我正在尝试将preventDefault应用到iBooks中的一个div,以创建一个没有用于翻页的触摸/拖动事件的区域。到目前为止,我只是试图阻止触摸事件,但它不起作用。我在这里的实现可能完全错误: var area = document.getElementById('area'); function touchStart(event) { event.preventDefault(); } function touchMove(event) { event.preventDe

我正在尝试将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);

如果有任何提示说明这并不能阻止触摸事件发生,我们将不胜感激。

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

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

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

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

我也遇到了同样的问题。不知道为什么
addEventListener
对我不起作用,但是
bind
对我起作用

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

我觉得我可能没有正确理解这些触摸事件是如何工作的。我不熟悉iBooks,但我猜这些操作实际上不是默认操作,而是由其他事件处理程序处理的。如果停止传播(使用
event.stopPropagation();
),则可能会解决问题。这是错误的
函数(e){x(e);}
x
完全等价。行动开始了。。。函数应该被完美地调用。因此,问题仍然存在:如何从触摸中抑制默认iBooks操作。