РЕДАКТИРОВАТЬ
Исходя из количества просмотров и полного отсутствия ответов, я должен предположить, что я плохо справился с сообщением своей проблемы.Я собираюсь попытаться исправить это сейчас.
Я расширил прототип HTMLElement с помощью нового tap метода, например, так:
HTMLElement.prototype.tap = function (func) {
this.addEventListener("touchend", func, false);
};
Я также создал пользовательский tap событие в jQuery:
$(document).delegate("*", "touchend", function (e) {
$(this).trigger("tap");
});
Я также создал плагин jQuery под названием tap :
$.fn.tap = function (func) {
this.bind("tap", func);
};
Если я попытаюсь использовать любойиз них с функцией обратного вызова, которая включает в себя оператор оповещения, обратный вызов выполняется дважды.Я нажимаю на элемент, чтобы открыть предупреждение.Я нажимаю кнопку «ОК» в оповещении, чтобы закрыть его.В следующий раз, когда я коснусь экрана, независимо от того, как долго я буду ждать, снова появится предупреждение.На этот раз нажатие кнопки «ОК», по-видимому, не вызывает другого повтора.
Однако, если функция обратного вызова не включает оператор оповещения (например, вместо этого я использую оператор console.log), только обратный вызоввыполняется один раз.
Кто-нибудь знает способ справиться с этим?Я собираюсь попробовать отцепить обработчик событий изнутри себя, а затем снова связать его, но это не более чем взлом, если он даже удастся.
Я бы предпочел сделать "1028 *" правильно " способ.: -)
ORIGINAL
Я только что закончил писать функцию "tap", которую я могу использовать, расширяя прототипы HTMLElement или Element, а также пользовательский "tap"плагин событий и «тап» как для jQuery.Я думал, что у меня есть это в сумке, пока я не решил использовать простое заявление о предупреждении в качестве тестового кода.
Когда я использую их с каким-либо элементом на моей тестовой странице, они запускаются должным образом, когда я впервые "нажимаю" на элемент, но проблема возникает после того, как я нажимаю кнопку «ОК» оповещения, а затем, через какое-то время, снова нажимаю на экран, после чего обработчик событий запускается второй раз.
Сначала я подумал, что это быломой собственный код, но когда я попробовал его с помощью следующего очень простого JavaScript, я смог воспроизвести точно такую же проблему.
document.getElementById("some-element").ontouchend = function (e) {
alert("Howdy doody!");
};
Я думаю, что это как-то связано с тем, что я должен коснутьсяснова на экране, чтобы выполнить «ОК» для оповещения, в то же время технически «внутри» обработчика событий (поскольку оповещение фактически «блокирует» завершение функции обработчика).
Тот факт, что поведениене реплицируется со следующим немного другим кодом, кажется, поддерживает мое воображение.: -)
document.getElementById("some-element").ontouchend = function (e) {
console.log("Howdy doody!");
};
Если я включу приведенный выше код на страницу и коснусь этого элемента после срабатывания обратного вызова, я не получу повторного запуска этой функции обратного вызова в отличие от предыдущего блока кода, гдеЯ увижу всплывающее предупреждение во второй раз, когда в следующий раз коснусь экрана после нажатия «ОК» , независимо от того, где на странице я нажимаю .
Действительно странная проблема, иЯ не смог найти никакой информации о том, почему это может происходить.У кого-нибудь есть идеи, что происходит?