SORU
1 Mart 2012, PERŞEMBE


Pencere popup Engelleyicisi devre dışı bırakın.JQuery olay açık.() preventDefault ayarlanır

Koşullu bir köprüyü tıklatın olay üzerine bir WordPress kullanmak bir iletişim göstermek istiyorum .

Ben bir gereği condition1 gibi bir WordPress kullanmak bir diyalog açmak ve eğer condition1 memnun değil ise, 'href' söz konusu olan etiket. tarafından başvurulan gibi sayfasına gidin

Link tıklatma olayı bir işlevi çağırmak mümkün duyuyorum. Bu işlev, şimdi başka bir URL (bu Bahar benim denetleyicisi yürütür ve cevap verir) yürüterek dedi durumu kontrol eder.

Tek pencere ile mükemmel çalışır.açık pop-up engelleyici tarafından engellenmiş.

$('a[href*=/viewpage?number]').live('click', function(e) {
    e.preventDefault();
    redirectionURL = this.href;
    pageId= getUrlVars(redirectionURL)["number"];
    $.getJSON("redirect/"   pageId, {}, function(status) {
        if (status == null) {
            alert("Error in verifying the status.");
        } else if(!status) {
            $("#agreement").dialog("open");
        } else {
            window.open(redirectionURL);
        }
    });
});

Ben kod e.preventDefault(); kaldırırsanız, popoup engelleyici sayfa engellemez, ancak condition1 için daha sonra diyaloğun yanı sıra açar açar 'href' sayfa.

Ben bir çözemezse başka bir sorun oluşturur. Her iki durum için adalet aynı anda vermek mümkün değil benim.

Bana bu sorunu çözmek lütfen yardım eder misiniz?

Bu çözüldükten sonra diyalog değil olay:) yani çözülmesi gereken bir başka sorun, navigasyon var

CEVAP
1 Mart 2012, PERŞEMBE


Pop-up blokerler genellikle sadece kullanılan window.open izin verirsırasındabir kullanıcı işleme olayı (bir tıklama gibi). Senin durumunda, window.open diyorsundaha sonraolay sırasında değil, çünkü $.getJSON asenkron.

İki seçeneğiniz var:

  1. Başka bir şey, window.open yerine.

  2. Yukarı tarayıcı UI kilitler normalde veba gibi Kaçınılması gereken bir durumdur ajax çağrısı senkron olun. $.getJSON eşittir:

    $.ajax({
      url: url,
      dataType: 'json',
      data: data,
      success: callback
    });
    

    ...ve $.getJSON çağrı senkron yukarıda senin parametreler eşleştirme ve ekleme yapabilirsiniz async: false:

    $.ajax({
        url:      "redirect/"   pageId,
        async:    false,
        dataType: "json",
        data:     {},
        success:  function(status) {
            if (status == null) {
                alert("Error in verifying the status.");
            } else if(!status) {
                $("#agreement").dialog("open");
            } else {
                window.open(redirectionURL);
            }
        }
    });
    

    Yine, eğer hedefe ulaşmak için başka bir yol var mı senkron ajax çağrıları katılmıyorum. Ama yapamazsın işte.

    İşte zaman uyumsuz çağrı. çünkü test başarısız kod bir örnek

    Live example | Live source(Canlı bağlantılar artık JSBin değişiklikler nedeniyle çalışma)

    jQuery(function($) {
      // This version doesn't work, because the window.open is
      // not during the event processing
      $("#theButton").click(function(e) {
        e.preventDefault();
        $.getJSON("http://jsbin.com/uriyip", function() {
          window.open("http://jsbin.com/ubiqev");
        });
      });
    });
    

    Ve burada, senkron çağrısı ile iş yapan bir örnek:

    Live example | Live source(Canlı bağlantılar artık JSBin değişiklikler nedeniyle çalışma)

    jQuery(function($) {
      // This version does work, because the window.open is
      // during the event processing. But it uses a synchronous
      // ajax call, locking up the browser UI while the call is
      // in progress.
      $("#theButton").click(function(e) {
        e.preventDefault();
        $.ajax({
          url:      "http://jsbin.com/uriyip",
          async:    false,
          dataType: "json",
          success:  function() {
            window.open("http://jsbin.com/ubiqev");
          }
        });
      });
    });
    

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AmazonWireless

    AmazonWirele

    8 EYLÜL 2010
  • Candyrat Records

    Candyrat Rec

    10 Mayıs 2006
  • LatinNinja99

    LatinNinja99

    28 EKİM 2011