2010-07-13 14 views
6

Başlangıçta görünmez olan bir menü içeren bir web sitesi tasarladım. Kullanıcı bir düğmeye tıkladığında, menü görünür hale gelir.Mobile Safari Olay Sorun

  1. menü

değildir Web sayfasında

  • tıklayın yerde menü görünür hale neden düğmesine tıklayın: artık görünür menüyü gizlemek için kullanıcı için iki yol vardır İkinci seçeneği kodlama biçimim, onclick olayını penceresine öğeye bağlamak ve kullanıcının menünün gizlenip gizlenmeyeceğini belirlemek için menünün konumuna nerede tıklattığını karşılaştırmaktır. Bu, Firefox ve Safari'de harika çalışıyor ancak Mobile Safari'de başarısız oluyor.

    penceresi onclick olayı, önceden atanan onclick olayı olan başka bir öğeye tıkladığımda yalnızca tetikler. Herhangi bir olay (lar) atanmamış bir öğeye tıklarsam, penceresi'un onclick olayı asla patlamaz. Menüyü görüntüleyen düğmeyi tıklarsam, düğmeye bağlı olayla birlikte yanar.

    Mobil Safari'de öğesi öğesine olay atamak mümkün mü?

  • cevap

    0

    Sadece tüm sayfayı kaplayan bazı <div> için onclick="void(0);" eklemek böylece her zaman bir onclick olay olan bir eleman tıklayarak ne olursa olsun. Yine de harika bir çözüm değil.

    Pencereye bağlı olarak onclick olayının olmasını tercih etmem. Neden bu etkinliğe sahip bir kapsayıcı <div> oluşturmuyorsunuz. O zaman şu an olduğu gibi idare et.

    7

    Aynı sorunla karşılaşıyorum. İşte benim için çalıştı. (Not: Bir Modernizr ve jQuery kapsamında çalışıyorum)

    Birincisi, appleios veya no-appleios buna göre sınıf ekleyecek olan iOS için test etmek Modernizr's addTest Plugin API kullanarak özel Modernizr sınıf ekleyin.

    Araştırmamda body, kendi gündemindeki olayları tetiklediğinden, tüm dokümanın içeriğini bir iOS bağlamında bir öğe ile sarmalayarak biraz önlem alıyorum. Sonra bu öğeye bir olay işleyici ekliyorum. Daha önce bu iplik önerildi Ne

    $(".appleios body").wrapInner('<div id="appleios-helper" />'); 
    $("#appleios-helper").bind("mouseup", function(){return;}); 
    

    void(0) kullanıyor. Bazı hızlı testler yaptım ve olayın void(0) olduğunu fark ettim. Kendi "boş" işlevime function(){return;} biçiminde bağlandığında işler çalışmaya başladı.

    Bu, tüm eleman açıkça yangın olayları olmadıkça hiçbir etkinlik Mobile Safari pişirilir gerçeğine menteşeleri (Safari Web Content Guide.) Sargı üzerinde bu boş olayı ekleyerek, şeyler olacak vücuda kadar kabarcık.

    bu kütüphanelerin hiçbiri ile boğaz JavaScript yapıyorsanız, aynı etki yerde belgenin vücudunda dokunurken bana ipuçları gizlemek için bu çalıştı HTML işaretlemesi

    <html> 
    ... 
    <body> 
    <div id="appleios-helper" onmouseup="function(){return;}"> 
    ... 
    </div> 
    </body> 
    </html> 
    

    elde edilebilir. Yolculuğunuz değişebilir.

    1

    Basitçe html vücuda benim için eser kukla tıklamada işlevi ekleyerek:

    function liveHandler(event) { 
        var target = event.target; ...} 
    
    window.addEventListener(evtype, liveHandler, true); 
    // evtype such as 'mousedown' or 'click' 
    // we use the capturing mode here (third parameter true) 
    
    1

    This is an: aşağıda gösterildiği gibi her zamanki canlı etkinlik işleyicileri kullanarak duyuyorum

    <body onclick="void(0)"> 
    

    Not eski soru, ama bugün aynı şeyle uğraştım.

    touchstart olay işlerini kullanarak bulundu.

    ben böyle çözülür:

    var isTouchDevice = 'ontouchstart' in document.documentElement; 
    if (isTouchDevice) { 
        // Do touch related stuff 
        $(document).on('touchstart', function (event) { 
        // Do stuff 
        }); 
    } else { 
        // Do non-touch related stuff 
        $(document).on('click', function() { 
        // Do stuff 
        }); 
    } 
    
    0

    Ayrıca:

    $('body').css('cursor', 'pointer'); 
    

    Apple bu "mühendis" ne yaptığını bilmiyorum. LOL.

    Bu sorun olsa da. Bunu her dokunmatik cihazda yapmak istemezsiniz. Sadece işaretleme aygıtı olmayan cihazlara dokunun (örneğin Dokunmatik Ekranlı Dizüstü Bilgisayarlar).

    Kaynak: http://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html

    makalenin sonuç şudur: Bütün bu durumda olmasının nedeni

    Yani anlamıyorum, ama bu kesinlikle böyledir. Köpürme sorunları yaşıyorsanız, gövde ile öğe arasında herhangi bir yerdeki boş işlevli etkinlik işleyicisini eklemeniz yeterlidir. Ama gerekli olmamalı.