2012-03-14 20 views
6

Burada nelerin eksik?"on" preventDefault

unutmayın: jQuery MOBİL

DEMO using preventDefault

  • DEMO using return false

  • Sadece bağlantıları ve hiçbir senaryo vardı sanki ben preventDefault sayfa yüklendiğinde kullanırsanız

    • kullanılır, ne zaman Ben false (ben her zaman eski JS onclick olay işleyici üzerinde kullandım) dönmek için değiştiririm, beklendiği gibi çalışır. Zaten diğer gönderileri inceledim ve tüm kullanımı .click ve tüm önleme preventDefault.

      $(document).ready(function() { 
          $("#leftdiv a").on("click",function(e) { 
          $("#rightDiv").load(this.href); 
          return false; // I was sure preventDefault would work 
          }); 
      }); 
      

      HTML

      <div id="leftdiv" style="position:absolute;padding-right:5%; overflow:scroll;"> 
      <a href="page1.htm">Launch page 1</a><br /> 
      <a href="page2.htm">Launch page 2</a> 
      </div> 
      
      <div id="rightDiv" style="padding-left:30%"></div> 
      
    +1

    ile ilgili bir sorundur, her şeyden önce' e.preventDefault() 'kullanmayı deneyin. – Joseph

    +0

    @Joseph, genellikle sonuna yerleştirildiğinden, çalıştırılacak kodun son püf noktasıdır. PreventDefault çağrısını nereye koyduğunuza bağlı değildir. –

    +0

    _ "beklendiği gibi çalışıyor" _ - "beklendiği gibi" bu durumda ne anlama geldiği konusunda biraz daha net olabilir misiniz? İstediğiniz davranış nedir? Ve çalışmayan tam kodu gösterebilir misin? – nnnnnn

    cevap

    15
    e.preventDefault(); 
    

    işe yaramadı? Üst veya web kodun sonuna üzerine e.preventDefault(); koyarak

    $('a').on("click",function(e){ 
        //do something 
        e.preventDefault(); 
    }); 
    

  • http://api.jquery.com/event.preventDefault/
    • bir önemi normalde. Ayrıca tahminim e.stop() yöntemidir. Ama neden senin için çalışırken return false; ile uğraşmıyorsun? jQuery mobil belgelerine

      : Bir elementin varsayılan tıklama davranışını iptal etme vclick olayı() preventDefault çağırabilir bir element varsayılan tıklama davranışı

      Uygulamalar iptal

      . Fare tabanlı aygıtlarda, bir vclick olayla ilgili preventDefault() öğesini çağırmak, balon olay aşaması sırasında gerçek tıklama olayında preventDefault() 'u çağırmaya eşittir. Temas bazlı cihazlarda, gerçek tıklama olayı vclick olayı gönderildikten sonra yaklaşık 300 ms sonra gönderilen gerçek tıklama olayı olduğundan biraz daha karmaşıktır. Dokunma aygıtları için, bir vclick olayında preventDefault() öğesini çağırmak, yakalama olayı sırasında tarayıcı tarafından gönderilen bir sonraki tıklama olayını yakalamaya çalışan vmouse eklentisine bazı kod kodunu tetikler ve callsDefault() ve Üzerinde StopPropagation(). Yukarıdaki uyarı, numaralı belgede belirtildiği gibi, hedefleme farklılık gösterebileceğinden, ilgili fare olayıyla bir dokunma olayı eşleşmesi bazen zordur. için, bu nedenle, vmouse eklentisi de koordinatlarına karşılık gelen bir tıklama olayını tanımlamaya çalışmak üzere geri düşer. Hedef ve koordinat tanımlamanın başarısız olduğu durumları vardır; bu durumda , tıklama olayının gönderilmesiyle sonuçlanır ve öğenin varsayılan eylemini tetikler veya içeriğin kaydırılmış veya değiştirilmiş olması durumunda, bir tıklamayı tetikler. farklı bir element. bu belirli bir eleman/kontrol için düzenli olarak gerçekleşirse, eyleminizi tetiklemek için tıklamanızı öneririz.

      function() { 
          return false; 
      } 
      
      // IS EQUAL TO 
      
      function(e) { 
          e.preventDefault(); 
          e.stopPropagation(); 
      } 
      

      Kaynak:http://css-tricks.com/return-false-and-prevent-default/

      Ayrıca document.ready

      desteklenmez olarak .on() değil mi de desteklenmektedir görünüyor

      Kaynak:http://jquerymobile.com/test/docs/api/events.html

    +0

    @mplungjan Cevabımı düzenledim. –

    +0

    etrafında gerçek bir yolu yok gibi görünüyor Güncellemelerime bakın – mplungjan

    +0

    Tamam yaptım, ama neden geri dönüş false kullanmıyorsunuz; çalışırken –

    1

    Bu sağlayabilir çözüm, ama neden açıklamak için bilgi eksikliği . Geçenlerde preventDefault benzer kodunda çalışma değildi konuya rastladım ve sorun aşağıdakileri deneyin $(document) vs $('body') gelen delege yatıyor:

    Bu jQuery 3.2.1 ile ancak olmaz
    <a href="http://stackoverflow.com" id="test1">Test 1</a> 
    <a href="http://stackoverflow.com" id="test2">Test 2</a> 
    <script> 
        $('body').on('click', '#test1', function(e) { 
         e.preventDefault(); 
         alert('hi 1'); 
        }); 
    
        $(document).on('click', '#test2', function(e) { 
         e.preventDefault(); 
         alert('hi 2'); 
        }); 
    </script> 
    

    , sadece teyit edebilir Bu, genellikle son noktaya yerleştirilen `return false 'seçeneğinin tersine, 2.1.7

    +1

    Bu, neden açıklayamayacağınız sorusuna nasıl cevap veriyor? –