2015-03-24 3 views
5

Ich verwende contextMenu Ereignis in .html Beispiel, es wird gefeuert, wenn ich lange auf ein DIV drücken, aber im Moment funktioniert es nicht. Ist in der neuesten IOS 8.2 Version etwas kaputt gegangen? Hier ist der Beispielcode,jQuery ContextMenu Ereignis funktioniert nicht in IOS 8.2

<head> 
    <title></title> 
    <script src="Scripts/jquery-1.9.1.min.js"></script> 
    <script type="text/javascript"> 

     $(document).ready(function() { 
      $("#content").on("contextmenu", function() { 
       alert("CM"); 
      }); 
     }); 
    </script> 
</head> 

<body> 
    <div id="content" style="height:300px; width:300px; background-color:gray;"></div> 
</body> 

Hier wird die Arbeitsprobe

http://jsfiddle.net/4zu1ckgg/

Bitte mir jemand dabei helfen.

Antwort

3

Grundsätzlich werden unter iOS Touch-Ereignisse nicht als Mausereignisse emuliert. Verwenden Sie stattdessen Touch-Ereignisse: "Touchstart", "Touchmove" und "Touchend".

In Ihrem Fall, auf iOS und im Gegensatz zu Android, wird "Kontextmenu" nicht ausgelöst, wenn der Bildschirm lange berührt wird. Um lange Berührung auf iOS anpassen Sie so etwas wie verwenden sollten:

// Timer for long touch detection 
var timerLongTouch; 
// Long touch flag for preventing "normal touch event" trigger when long touch ends 
var longTouch = false; 

$(touchableElement) 
    .on("touchstart", function(event){ 
     // Prevent default behavior 
     event.preventDefault(); 
     // Test that the touch is correctly detected 
     alert("touchstart event"); 
     // Timer for long touch detection 
     timerLongTouch = setTimeout(function() { 
      // Flag for preventing "normal touch event" trigger when touch ends. 
      longTouch = true; 
      // Test long touch detection (remove previous alert to test it correctly) 
      alert("long mousedown"); 
     }, 1000); 
    }) 
    .on("touchmove", function(event){ 
     // Prevent default behavior 
     event.preventDefault(); 
     // If timerLongTouch is still running, then this is not a long touch 
     // (there is a move) so stop the timer 
     clearTimeout(timerLongTouch); 

     if(longTouch){ 
      longTouch = false; 
      // Do here stuff linked to longTouch move 
     } else { 
      // Do here stuff linked to "normal" touch move 
     } 
    }) 
    .on("touchend", function(){ 
     // Prevent default behavior 
     event.preventDefault(); 
     // If timerLongTouch is still running, then this is not a long touch 
     // so stop the timer 
     clearTimeout(timerLongTouch); 

     if(longTouch){ 
      longTouch = false; 
      // Do here stuff linked to long touch end 
      // (if different from stuff done on long touch detection) 
     } else { 
      // Do here stuff linked to "normal" touch move 
     } 
    }); 

Hier ist eine der Seite erklärt (unter anderem), dass Touch-Ereignisse werden nicht emuliert als Mausereignisse auf jedem Betriebssystem: http://www.html5rocks.com/en/mobile/touchandmouse/

Hoffnung dieser hilft, brauchte ich lange um es herauszufinden;)