2012-05-23 15 views
21

Zdarzenie kliknięcia jQuery nie wydaje się być uruchamiane w przeglądarkach mobilnych.Zdarzenie kliknięcia jQuery nie działa w przeglądarkach mobilnych

HTML jest następujący:

<!-- This is the main menu --> 
<ul class="menu"> 
    <li><a href="/home/">HOME</a></li> 
    <li class="publications">PUBLICATIONS &amp; PROJECTS</li> 
    <li><a href="/about/">ABOUT</a></li> 
    <li><a href="/blog/">BLOG</a></li> 
    <li><a href="/contact/">CONTACT</a></li> 
</ul> 


<!-- This is the sub-menu that is to be fired on click --> 
<div id="filter_wrapper"> 
    <ul id="portfolioFilter"> 
     <li><a href="/nutrition-related/">Nutrition related</a></li> 
     <li><a href="/essays/">Essays and Nonfiction</a></li> 
     <li><a href="/commissioned/">Commissioned works</a></li> 
     <li><a href="/plays/">Plays and performance</a></li> 
     <li><a href="/new-projects/">New Projects</a></li> 
    </ul> 
    </div> 

Jest to skrypt jQuery dla urządzeń przenośnych:

$(document).ready(function(){ 
    $('.publications').click(function() { 
     $('#filter_wrapper').show(); 
    }); 
}); 

Kiedy klikam „publikacje” element listy na mobilnej przeglądarki nic się nie dzieje.

Można przeglądać strony TUTAJ: http://www.ruthcrocker.com/

Nie wiem, czy istnieje jQuery mobile konkretne wydarzenia.

Odpowiedz

24

Raminson ma ładny odpowiedź, jeśli jesteś już (lub nie przeszkadza) przy użyciu jQuery Mobile. Jeśli chcesz inne rozwiązanie, dlaczego nie wystarczy zmodyfikować kod w następujący sposób:

zmiana LI że masz problemy z celu włączenia znacznika, a stosuje się klasę tam zamiast LI

<!-- This is the main menu --> 
<ul class="menu"> 
    <li><a href="/home/">HOME</a></li> 
    <li><a href="#" class="publications">PUBLICATIONS &amp; PROJECTS</a></li> 
    <li><a href="/about/">ABOUT</a></li> 
    <li><a href="/blog/">BLOG</a></li> 
    <li><a href="/contact/">CONTACT</a></li> 
</ul> 

Twój kod javascript/jquery ... zwraca false, aby przestać bąbelkować.

$(document).ready(function(){ 
    $('.publications').click(function() { 
     $('#filter_wrapper').show(); 
     return false; 
    }); 
}); 

Powinno to zadziałać w odniesieniu do tego, co próbujesz zrobić.

Co więcej, zauważyłem, że twoja strona otwiera inne linki w nowych kartach/oknach, czy to celowe?

+1

Działa z tą metodą zastosowania klasy do zakotwiczenia zamiast elementu listy, ale nie zawsze pojawia się przy pierwszym odczycie (lub po dziesięciokrotnym kliknięciu). Jeśli chodzi o linki otwierające się w nowych oknach/kartach, jest to jedna z zasad miejsca, w którym pracuję. –

+2

Mam to działa. Okazuje się, że używałem jQuery 1.5; Uaktualniłem do wersji 1.7 i naprawiłem to! Dzięki wielkie! –

+0

Nie ma za co. Cieszę się, że to działa. Miałem problemy z przeglądarkami mobilnymi przed próbą zastosowania zdarzeń kliknięcia do elementów LI i wydaje się, że jest to najłatwiejszy sposób obejścia tego problemu. – mason81

7

Można użyć jQuery Telefony vclick zdarzenie:

znormalizowanego zdarzenie do obsługi touchend lub kliknięcie myszą zdarzeń na urządzeniach dotykowych.

$(document).ready(function(){ 
    $('.publications').vclick(function() { 
     $('#filter_wrapper').show(); 
    }); 
}); 
+0

czy powinniśmy dołączyć do tego plik jquery.mobile.js? czy utworzy konflikt w javascriptu z plikiem jquery.js? – Varada

+1

@Varada Tak, powinniśmy. Nie, nie powoduje konfliktu. – undefined

2

JqueryMobile: Ważne - Wykorzystanie $(document).bind('pageinit') nie $(document).ready():

$(document).bind('pageinit', function(){ 
    $('.publications').vclick(function() { 
     $('#filter_wrapper').show(); 
    }); 
}); 
+0

Dla przyszłych czytelników to wydarzenie zostało wycofane na rzecz 'pagecreate' od jQmobile 1.4.0. – Nit

34

wiem, że to jest rozwiązane stary temat, ale ja po prostu odpowiedział na podobne pytanie i chociaż moja odpowiedź może pomóc komuś innemu jako Obejmuje inne opcje rozwiązania:

Kliknij zdarzenia działają nieco inaczej na urządzeniach dotykowych. Nie ma myszy, więc technicznie nie ma kliknięcia. Zgodnie z tym artykułem - http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html - ze względu na ograniczenia pamięci zdarzenia kliknięcia są emulowane i wysyłane z elementów kotwicznych i wejściowych. Jakikolwiek inny element może wykorzystać dotykowe zdarzenia, lub kliknięcia wydarzenia ręcznie zainicjować przez dodanie obsługi do surowego elementu HTML, na przykład, aby wymusić kliknij zdarzeń na pozycji listy:

$('li').each(function(){ 
    this.onclick = function() {} 
}); 

Teraz kliknij zostanie wyzwolony przez Li, dlatego może być słuchany przez jQuery.


Na razie można po prostu zmienić słuchacza do elementu kotwicy jako bardzo dobrze postawione przez @ mason81 lub użyć dotykowy zdarzenia na li:

$('.menu').on('touchstart', '.publications', function(){ 
    $('#filter_wrapper').show(); 
}); 

Oto skrzypce z kilka eksperymentów - http://jsbin.com/ukalah/9/edit

+5

To fantastyczna porada dla każdego, kto chce korzystać z jQuery bez obciążania jQuery Mobile. Pierwszy przykład działa idealnie. Dziękuję Hugo. – bafromca

+0

Praca z touchstartem. Dzięki za udział –

+0

Bardzo interesujące. Miałem prostą nakładkę, która nie znikała po kliknięciu. To naprawiło to. Dziękuję Ci. – dgig

1

rozwiązanie Wskaż i kliknij w jQuery (bez jQuery Mobile)

Niech jQuery Mobile site build your download i dodaj go do swojej strony. Aby przeprowadzić szybki test, możesz również skorzystać ze skryptu podanego poniżej.

Następnie możemy rewire wszystkie połączenia do $ (...) .Kliknij() stosując następujący fragment:

<script src=”http://u1.linnk.it/qc8sbw/usr/apps/textsync/upload/jquery-mobile-touch.value.js”></script> 

<script> 

$.fn.click = function(listener) { 

    return this.each(function() { 

     var $this = $(this); 

     $this.on(‘vclick’, listener); 

    }); 

}; 
</script> 

source

0

odpowiedź Vohuman wiodą mnie do własnej realizacji:

$(document).on("vclick", ".className", function() { 
    // Whatever you want to do 
}); 

Zamiast:

$(document).ready(function($) { 
    $('.className').click(function(){ 
    // Whatever you want to do 
    }); 
}); 

Mam nadzieję, że to pomoże!

+0

Jaka jest różnica między dwoma urywkami w odpowiedzi? – lKashef

+0

Moduł obsługi zdarzeń "vclick" jQuery Mobile symuluje obsługę zdarzeń "onclick" na urządzeniach mobilnych. Przeczytaj więcej o vclick tutaj: https://api.jquerymobile.com/vclick/ –

Powiązane problemy