Ich habe ein ansprechendes Dropdown-Menü. Für Tablet-Benutzer brich ich den Klick ab, sodass das Dropdown-Menü mit event.preventDefault () funktioniert. Dies funktioniert auf dem iPad einwandfrei, aber nicht auf Android. Die Funktion selbst funktioniert, da ich einige Tests durchgeführt habe, aber event.preventDefault () bricht den Klick nicht ab. Ich habe es stattdessen mit einer Rückgabe false versucht, aber es funktioniert auch bei mir nicht. Ich habe einige Posts gesehen, die sich darauf beziehen, konnte aber keine Lösung dafür finden. Das von mir verwendete Javascript ist:

$("#nav li a").on({ 'touchstart' : function(event) { 
        //if there is a submenu we cancel the click to show the drop down
        if (String($(this).parent().find('ul').html())!='undefined')
        {
            event.preventDefault();
        }
    }
});//end of touch event
2
user1620090 19 Nov. 2013 im 19:15

3 Antworten

Beste Antwort

Klingt so, als würde Ihr Ereignis den Dom in die Luft sprudeln lassen. Versuchen Sie event.stopPropagation (); Schauen Sie sich auch das Double Tap Plugin an, ich hatte dieses Problem auch schon einmal.

Demo

2
eg_dac 19 Nov. 2013 im 16:01

Möglicherweise wird unter Android auch das Ereignis touchend oder click ausgelöst. Haben Sie versucht, diese Ereignisse Ihrem Hörer hinzuzufügen? Versuche dies:

$("#nav li a").on({ 'touchstart touchend click' : function(event){ 
   if (String($(this).parent().find('ul').html())!='undefined'){
       event.preventDefault();
   }
}});
0
user1199130user1199130 19 Nov. 2013 im 15:31

Versuchen Sie auch, touchend zu überprüfen - Android hat uns auch mit preventDefault ein unkonventionelles Verhalten verliehen. Wenn Ihr Problem darin besteht, dass dies auf einem Anker geschieht, sollten Sie die href des Ankers durch Javascript ersetzen: void (0);

Instead of this:
<a href="#">Open Menu</a>

Do this:
<a href="javascript:void(0);">Open Menu</a>

Berührungsereignisse durchlaufen einen ganzen Lebenszyklus und es sieht nicht so aus, als hätte preventDefault nichts damit zu tun, weitere Ereignisse (touchmove, touchend usw.) zu stoppen.

Sie können auch in das vclick -Ereignis von jQuery schauen, das versucht, Mausklickereignisse zu verwässern und Ereignisse in einem ähnlichen Ereignis zu berühren. Lesen Sie jedoch unbedingt die Hinweise und Warnungen http://api.jquerymobile.com/vclick/

0
phatskat 19 Nov. 2013 im 15:39