2010-12-31 5 views
1

У меня проблема с моим веб-приложением, которое предназначено для iPad. Я использую jQuery и jQuery UI для перетаскивания элементов на экране. Потому что на IPad, элемент не может быть втянута по умолчанию, я добавил эту библиотеку:jQuery - click-event вызывается дважды на iPad

http://code.google.com/p/jquery-ui-for-ipad-and-iphone/

В том числе, я могу перетащить элементы на IPad, но и возникает проблема. У меня на перетаскиваемом элементе также есть div с изображением, которое должно быть кликабельным.

Я интегрировать эти строки:

$(document).ready(function() { 
    $(".note").draggable(); 
    $('.closebutton').click(function() { 
     alert("test"); 
    }); 
}); 

Проблема, в том числе перетаскивания библиотеки, предупреждающее сообщение test выскакивает дважды или экран замерзает.

Я создал полную рабочую демо-версию здесь:

http://jsbin.com/oliwo/2/

На обычных настольных браузерах, как Firefox 4 Beta и Safari, он работает, появляется только один test сообщения, щелкнув мышью по й - удалить изображение. На iPad я получаю сообщение дважды, или экран застыл.

Кто-нибудь может мне помочь? Большое вам спасибо & С наилучшими пожеланиями.

ответ

0

Не знаю, почему, но если я не использую сообщения alert, это сработает. Я создаю новые элементы, а затем он вызывается только один раз, на iPad и Desktop Safari.

5

На самом деле это не ответ, так как я не знаю, почему у вас есть это дважды. Но вы можете попробовать обход , если вы уверены, что ваше событие click - это единственное поведение события клика, которое должно быть прикреплено к этой кнопке; Оформить отвязать() как раз, прежде чем вы связать, это удалит все предыдущие щелчок связывания (так, если это будет работать в несколько раз, вы получите только один случай):

$('.closebutton').unbind().click(function() { ... 

или лучше:

$('.closebutton').unbind('click').click(function() { ... 
+0

не работает, я также получил два предупреждения сообщений ... Я думаю, что это потому, что библиотека перетаскивания также обрабатывает событие click/tap и дважды вызывает функцию щелчка. – Tim

+0

Это сработало для меня! Так странно. –

0

Я вижу эту проблему только на iPad, возможно, связанную с некоторыми версиями webkit. Unbind работал для меня, и я также читал, что это только существует, если код jquery находится в теге body html, если его в голове это не проблема.

3

Я обнаружил, что события срабатывают дважды при отображении окна предупреждения одним нажатием. Я сумел преодолеть эту проблему с помощью SetTimeout, чтобы показать окно предупреждения ...

$("#myButton").unbind("click").click(function() { 
    // Have to use a setTimeout else on iPhone the alert may appear twice in certain scenarios 
    setTimeout(function() { alert('The message'); }, 300); 
    return false; // Return false to prevent href being followed 
}); 
0

просто избежать распространения щелчка

$("tr").live('click',function() { 

     ... 

     $(event.toElement).one('click', function(e){ e.stopImmediatePropagation(); }); 
    });