jquerytouchmobile-safarijquery-click-event

Click event jquery on safari mobile


The jquery click event doesn't work in mobile safari.

I tried the "curson: pointer", also downgrade/upgrad jquery version but nothing work.

https://codepen.io/larsen1982/pen/yWYNLj

$(".next").click(function(){
    if(animating) return false;
    animating = true;

This is the jquery: http://thecodeplayer.com/uploads/js/jquery-1.9.1.min.js

In desktop, ipad and Android smarthpone browsers the code work fine. In chrome and safari mobile (iphone) the buttons don't work.


Solution

  • The problem is iPhones don't raise click events. They raise "touch" events. Adding in the following code works.

    function touchHandler(event){
        var touches = event.changedTouches,
            first = touches[0],
            type = "";
    
        switch(event.type)
        {
           case "touchstart": type = "mousedown"; break;
           case "touchmove":  type = "mousemove"; break;        
           case "touchend":   type = "mouseup"; break;
           default: return;
        }
    
        var simulatedEvent = document.createEvent("MouseEvent");
        simulatedEvent.initMouseEvent(type, true, true, window, 1, 
                              first.screenX, first.screenY, 
                              first.clientX, first.clientY, false, 
                              false, false, false, 0/*left*/, null);
    
        first.target.dispatchEvent(simulatedEvent);
        event.preventDefault();
    }
    
    function init() {
        document.addEventListener("touchstart", touchHandler, true);
        document.addEventListener("touchmove", touchHandler, true);
        document.addEventListener("touchend", touchHandler, true);
        document.addEventListener("touchcancel", touchHandler, true);    
    }