2013-06-19 5 views
5

Come posso cambiare il ondblclick evento per onclick evento quando pagina rileva che la sua su IOS/Android ecc Che cosa rende difficile è che non posso chiamare l'ID dell'elemento poiché trasporta i dati dalla funzione database a Javascript.Change ondblclick di evento onclick quando si utilizza iOS/Android ecc

Check out.

lato server:

<?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>'; 
?> 

lato client:

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

Perché devi aspettare e verificare il tipo di dispositivo sul lato client quando si può controllare da PHP e basta modificare il codice la tua produzione di conseguenza? Controlla il valore $ _SERVER ['HTTP_USER_AGENT']. – Drew

+0

Non lo sapevo =) I'll dargli uno scatto grazie .. – Markipe

+0

@Markipe - Non vorrei davvero consigliare lo User Agent sniffare, leggi qui per i motivi per cui: [Rilevazione del browser usando l'agente utente] (https : //developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent). Inoltre, per un esempio di come consiglierei di farlo basta vedere la mia risposta :) – Joe

risposta

0

penso che si dovrebbe riscrivere alcuni di voi il codice per rendere più facile per ottenere ciò che si vuole .

Provare a annusare l'agente utente non è una grande idea. I dispositivi possono cambiare, i nuovi SO possono essere lanciati e richiede più manutenzione da parte tua. Il rilevamento delle feature è un approccio molto migliore in quanto copre i dispositivi ora e in futuro e riduce al minimo i falsi positivi.

L'aggiornamento PHP ora utilizza l'attributo HTML5 data-* e rimuove l'evento in linea:

<?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>'; 
?> 

I nuovi JS verifica se si tratta di un dispositivo touchscreen e definisce una variabile touchDevice come true o false seconda di quale si tratta. Questa variabile viene quindi utilizzata per definire l'evento. Se è true (il dispositivo è in grado di toccare), l'evento è click, altrimenti è dblclick.

Il gestore eventi ora utilizza .on() anziché essere definito in linea e utilizza la funzione .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> 

o semplicemente utilizzare il PHP aggiornato e l'evento doubletap:

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

sorry joe, mi sono appena eccitato con php $ _SERVER ['HTTP_USER_AGENT']. Comunque ho appena provato la tua soluzione è molto buona e impressionante. Due pollici per te. Grazie .. – Markipe

+1

@Markipe - grazie, non c'è problema :) Ho solo pensato di mostrarti un'alternativa. – Joe

Problemi correlati