Почему событие onclick подавляется, когда для события touchstart вызывается protectDefault ()? - PullRequest
3 голосов
/ 21 июля 2011

Я пытаюсь реализовать некоторые функции javascript для моего устройства Ipad. Я хотел бы использовать какое-либо действие смахивания и щелкнуть на моем холсте div.

Я реализовал функцию горизонтальной и вертикальной прокрутки. Я должен использовать protectDefault в событии touchstart, чтобы предотвратить полную прокрутку страницы при перелистывании. Это работало хорошо, но после этого я заметил, что отключил каждое событие щелчка на этом div. После удаления protectDefault событие click снова срабатывает.

Есть ли решение для решения этой проблемы?

dojo.connect(this.node, "ontouchstart", this, "touchstart"); 

...   

touchstart: function(e){
    this.touch = dojo.clone(e.changedTouches[0]);
    e.preventDefault();   
}

this.node = document.getElementById ('aa');

<div id="aa" style="width: 600px; height: 400px;">
  <div onclick="alert('asd');" style="width: 100px; height: 100px; background-color: #ff0000; margin: auto;">

  </div>
</div>

Ответы [ 2 ]

7 голосов
/ 05 декабря 2012

Я знаю, что Prusse уже правильно ответил на этот вопрос, но ему не хватает уверенности, которую я ищу в ответе. Причина, по которой событие click, подавляемое функцией protectDefault () в Touchstart, заключается в том, что любое событие, связанное с последующим Touchstart, будет подавлено. Решение состоит в том, чтобы вместо этого добавить функцию warnDefault () к событию touchmove.

Это более подробно объясняется в документации Mozilla в разделе Обработка кликов :

Начиная с вызова метода protectDefault () при сенсорном запуске или первом касательном движении событие серии предотвращает срабатывание соответствующих событий мыши, это обычно для предотвращения прикосновения, но не touchstart. Таким образом, события мыши могут по-прежнему срабатывать и тому подобное ссылки будут продолжать работать.

2 голосов
/ 21 июля 2011

Вы можете попытаться предотвратить действие по умолчанию для события touchmove.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...