2013-06-19 10 views
5

Jak mogę zmienić ondblclick wydarzenie do onclick zdarzenie, gdy strona stwierdzi, że jej na IOS/Android itd. Co sprawia, że ​​trudno jest nie mogę po prostu zadzwonić identyfikator elementu, ponieważ przenosi dane z bazy danych do funkcji JavaScript.Zmień ondblclick do onclick zdarzenia przy użyciu IOS/Android itp

Sprawdź to.

po stronie serwera:

<?php   
echo '<table>'; 
while($row=mysql_fetch_array($query)){ 
    echo '<tr><td ondblclick="sampFunc("'.$row[0].'","'.$row[1].'")">'; 
     echo $row[0]; 
    echo '</td></tr>'; 
} 
echo '</table>'; 
?> 

Client-side:

<script> 
$(document).ready(function(){ 
    if(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)){ 
     /* ?????????????????? */ 
    } 
}); 
function sampFunc(data1,data2){ 
    //-- Something 
} 
</script> 
+1

Dlaczego trzeba czekać i sprawdzić typ urządzenia po stronie klienta, kiedy można sprawdzić go z PHP i wystarczy zmienić kod twoje wyjście odpowiednio? Sprawdź wartość $ _SERVER ['HTTP_USER_AGENT']. – Drew

+0

Nie wiedziałem, że jedna =) Dam ci szansę dzięki .. – Markipe

+0

@Markipe - Naprawdę nie doradziłbym usypiania użytkownika Agentem, przeczytaj tutaj z powodów, dla których: [Wykrywanie przeglądarki za pomocą agenta użytkownika] (https : //developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent). Ponadto, na przykład tego, jak zaleciłbym robienie tego po prostu zobacz moją odpowiedź :) – Joe

Odpowiedz

0

myślę, że powinien ponownie napisać niektórzy z was kodu łatwiej osiągnąć to, co chcesz .

Próbowanie sniff agenta użytkownika nie jest świetnym pomysłem. Urządzenia mogą się zmieniać, nowe systemy operacyjne mogą być uruchamiane i wymagają więcej konserwacji po zakończeniu. Wykrywanie obiektów jest znacznie lepszym podejściem, ponieważ obejmuje urządzenia teraz iw przyszłości, a także minimalizuje liczbę fałszywych alarmów.

Zaktualizowana PHP teraz używa atrybutu HTML5 data-* i usuwa zdarzenie inline:

<?php   
echo '<table class="myclass">'; 
while($row=mysql_fetch_array($query)){ 
    echo '<tr><td data-a="'.$row[0].'" data-b="'.$row[1].'">'; 
     echo $row[0]; 
    echo '</td></tr>'; 
} 
echo '</table>'; 
?> 

Kontrole nowych JS, czy jest to urządzenie z ekranem dotykowym i definiuje zmienną touchDevice jak true lub false zależności który to jest. Ten var jest następnie używany do zdefiniowania zdarzenia. Jeśli jest to true (urządzenie obsługuje dotyk), to zdarzenie to click, w przeciwnym razie jest to dblclick.

Program obsługi zdarzeń używa teraz .on() zamiast być zdefiniowany w linii i korzysta z funkcji .data().

<script> 
var touchDevice = !!('ontouchstart' in window) || !!('onmsgesturechange' in window); 

$(document).ready(function(){ 
    var dblevent = touchDevice ? 'click' : 'dblclick'; 
    $('.myclass td').on(dblevent, function(){ 
     var data1 = $(this).data('a'), data2 = $(this).data('b'); 
     //-- Something 
    }); 
}); 
</script> 

lub po prostu użyć zaktualizowaną PHP i zdarzenie doubletap:

$('.myclass td').on('dblclick doubletap', function(){ 
     var data1 = $(this).data('a'), data2 = $(this).data('b'); 
     //-- Something 
}); 
+0

Przepraszam, po prostu podekscytowałem się php $ _SERVER ['HTTP_USER_AGENT']. W każdym razie właśnie wypróbowałem twoje rozwiązanie, które jest bardzo dobre i imponujące. Dwie kciuki dla ciebie. Dzięki .. – Markipe

+1

@Markipe - dzięki, nie ma problemu :) Pomyślałem, że pokażę ci alternatywę. – Joe

Powiązane problemy