2014-09-16 13 views
5

Sto tentando di attivare un menu con jQuery con un clic (tocco) su dispositivo mobile, ma non funziona su cellulare. Quando faccio il ridimensionamento della 'finestra' per provare l'aspetto mobile, funziona con il clic, ma in un emulatore o anche provandolo con il mio telefono, non funziona.jQuery onclick non funziona sul cellulare

Tag HTML

<img src="i/mobilemenu.jpg" id="mobileMenuButton" style="position:absolute; right:0;"/> 

CSS:

#mobileNavigation {display:none} 

codice javascript:

<script type="text/javascript"> 
      $(document).ready(function(){ 
        $('#mobileMenuButton').on('click touchstart',function(){ 

          if ($('#mobileNavigation').css('display') == 'none') { 
           $('#mobileNavigation').css('display','block'); 
          } 
          else 
          { 
            $('#mobileNavigation').css('display','none'); } 
          }); 
        }); 
       </script> 
+0

Prova a rimuovere clic e lascia solo touchstart, controlla se fa la differenza, non che quella sia la soluzione. – artm

+0

Ha funzionato accedendo dal mio Android: http://jsfiddle.net/drn595w3/show/ – LcSalazar

+0

Solo un SUGGERIMENTO: puoi sostituire tutto il tuo show/hide processo e condizioni con questo: '$ ('# mobileNavigation').) - Vedi: http://jsfiddle.net/drn595w3/1/ – LcSalazar

risposta

0
<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#mobileMenuButton').on('mousedown touchstart',function(){ 
      var userAgent = window.navigator.userAgent; 
      if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)|| userAgent.match(/Android/i)) { 
     if ($('#mobileNavigation').css('display') == 'none') { 
      $('#mobileNavigation').css('display','block'); 
     } else { 
      $('#mobileNavigation').css('display','none'); 
     } 
     } 
     }); 
    }); 
</script> 

solo fornire l'user agent.

+0

Provato e niente :( – vulcanR

+0

Perché dovrebbe provare l'OP? Per favore, spiega –

+2

mousedown su un dispositivo mobile? –

1

Mi ricordo che quando stavo creando un'app mobile, elementi che non erano collegamenti non venivano rilevati nell'evento click a meno che non avessi dato loro la proprietà CSS di cursor: pointer. Forse questo è un problema simile. Prova a assegnare al pulsante quella proprietà nell'attributo style.

+0

provato, e ha lo stesso problema :( – vulcanR

3

Stabilire un gestore di clic in base al cliente in quanto tale:

var clickHandler = ("ontouchstart" in window ? "touchend" : "click") 

e utilizzarlo ogni volta che si desidera ascoltare cliccare eventi:

$(".selector").on(clickHandler, function() {...}) 

In questo modo si può sempre assicurarsi il corretto l'evento viene ascoltato.

+0

provato e non lavoro ... so che è strano, ogni altro sviluppatore che ho chiesto aiuto sono anche sorpreso che non funziona – vulcanR

0

È venuto attraverso questa domanda e realizzato il clic (e il touchstart) dovrebbe funzionare.

@vulcanR, non funziona nel tuo caso perché hai già #mobileNavigation come display: none; Quindi, non c'è spazio per l'evento da attivare.

Invece, provare il seguente codice e dovrebbe LAVO-

$(document).ready(function() { 
    $('#mobileMenuButton').on('click touchstart', function() { 
     if ($('#mobileNavigation').css('opacity') == '0') { 
      $('#mobileNavigation').css('opacity','1'); 
     } else { 
      $('#mobileNavigation').css('opacity','0'); } 
     }); 
    }); 
}); 

La ragione di questo lavoro è che opacity:0 mantiene l'altezza e la larghezza dell'elemento che display:none rende le dimensioni pari a zero, quindi non c'è tenuta per l'evento. Si potrebbe anche usare visibility:hidden, ma questo non ascolta l'evento click o nessun evento in generale.

Problemi correlati