我有jQuery Mobile的iPad Safari和由於某種原因觸摸滑動事件發射兩次。停止jQuery Mobile滑動事件雙冒泡
在過去的一年中,人們已經報告了與本週最近相同的問題,但我無法找到如何解決這個雙重事件而不修改jQuery Mobile的解釋,我不想這樣做。 Thread on jQuery forums
滑動處理程序的follwoing元素綁定都具有相同的不正確的雙重事件結果,其中每次滑動都會調用兩次警報。
jQuery Mobile觸摸事件應該如何綁定以避免雙冒泡?
// Test 1: Binding directly to document with delegate()
$(document).delegate(document, 'swipeleft swiperight', function (event) {
alert('You just ' + event.type + 'ed!');
});
// Test 2: Binding to document with on() handler recommended as of 1.7 with and without preventDefault
$(document).on('swipeleft',function(event, data){
event.preventDefault();
alert('You just ' + event.type + 'ed!');
});
// Test 3: Binding to body with on() with and without event.stopPropagation
$('body').on('swipeleft',function(event, data){
event.stopPropagation();
alert('You just ' + event.type + 'ed!');
});
// Test 4: Binding to div by class
$('.container').on('swipeleft',function(event, data){
event.stopPropagation();
alert('You just ' + event.type + 'ed!');
});
我把它放在'的$(document).bind( 'pageinit')',它不工作。我必須在每個滑動事件處理程序中放置event.stopImmediatePropagation();以使其起作用 – 2013-11-28 23:11:10
這很有道理。你的滑動事件觸發兩次,需要用'stopImmediatePropagation()'來停止,就像上面的答案一樣。 'pageinit'事件不是雙冒泡的,所以它不需要手動停止。 'pageinit'應該每頁只觸發一次,但是它會爲每個動態添加的頁面再次觸發。 – 2013-11-29 21:09:30
這看起來似乎比其他解決方案效果更好,但我仍然在swiperight上發生了一些棘手的行爲......我的Android 4.x在幾個(隨機?)頁面出現在一個小小的螺母上,然後它出現在正確的頁面上。 – cbmtrx 2015-12-03 17:21:31