2013-04-17 4 views
2

Примечание ***: Есть, чтобы проверить его на планшете, я только проверил его на IpadJquery Mobile «водопроводная» событие ошибка

1 касание будет срабатывать различные события другого объекта в том же виде спорта

http://jsfiddle.net/wR6dK/1/

HTML:

<div id="box1"></div> 
<div id="box2"></div> 

JS:

$("#box1").on('tap',function(){ 
    $("#log").append('box1 clicked <br>'); 
    $(this).fadeOut(0); 
}); 

$("#box2").on('tap',function(){ 
    $("#log").append('box2 clicked <br>'); 
    $(this).fadeOut(0); 
}); 

этого случай зеленый ящик скрыт ... он может уйти или изменить Z-индекс, все будет инициировать событие красного квадрата с одним касанием

Является ли это, как это работает? происходит ли это с «vclick» и другими событиями?

Это ошибка?

+0

Хм это интересно. Нет, это не то, что происходит при нажатии на нее, и это определенно не является желаемым поведением. Это кажется странным. Это происходит только со мной, когда я нажимаю на перекрывающуюся часть. Это то, что вы видите? – Ian

+0

@Ий ДА !!! Это то, что я нажимаю на свой сайт –

ответ

2

Это одна из самых старых ошибок JavaScript, никогда не фиксированная, потому что она не была известна в течение длительного времени. Чтобы сделать рассказ коротким, javascript никогда не предназначался для использования подобным образом, но предоставлял человеку инструмент, и он сгибал его на свои нужды, поэтому у нас есть фреймворки, такие как jQuery и jQuery Mobile.

Это также называется событием падения. Это можно предотвратить с помощью этой функции:

и возвращают ложь.

Это ваш пример модифицирован для работы с этим решением: http://jsfiddle.net/Gajotres/wR6dK/5/

$("#box1").on('tap',function(e){ 
    $("#log").append('box1 clicked <br>'); 
    $(this).fadeOut(0); 
    e.stopPropagation(); 
    return false;  
}); 

$("#box2").on('tap',function(e){ 
    $("#log").append('box2 clicked <br>'); 
    $(this).fadeOut(0); 
    e.stopPropagation(); 
    return false;  
}); 

Позвольте мне показать вам еще один пример, чтобы вы могли понять эту проблему в случае JQuery Mobile: http://jsfiddle.net/Gajotres/Xz2np/

$('#page1').live('pagebeforeshow',function(e,data){ 
    $('.someDiv').live('click', function (e) { 
     alert('Event is not going to propagate to content div, thus not hiding a header');    
     event.stopPropagation(); 
     event.stopImmediatePropagation(); 
    }); 
}); 

Для понять эту проблему, просто нажмите на пример DIV, затем прокомментируйте эти две строки, снова запустите пример и снова нажмите DIV. И, пожалуйста, я знаю, что live не рекомендуется в jQuery 1.9, но это мой старый пример.

+0

, насколько мне известно, stopPropagation - предотвратить событие от «пузыря» до его родителя. box1 и box2 являются братьями и сестрами одного и того же родителя. Кто-нибудь проверил это на планшете? –

+0

забудьте о первом шаге моего предыдущего комментария, но это не происходит с обычными событиями щелчка, только коснитесь, так что я не думаю, что это проблема ... –

Смежные вопросы