2013-03-24 74 views
1

我正在編寫一個腳本,當單擊一個按鈕時,如果用戶登錄,將通過ajax進行檢查,如果是,則在不離開頁面的情況下執行一些操作。如果用戶沒有登錄,我想打開一個登錄窗口彈出窗口。問題是,因爲window.open()不是直接在'click'事件下面,它被彈出窗口攔截器阻止。如果我將window.open放在點擊操作下,它就可以正常工作。jQuery - 在ajax調用中保持點擊事件

任何方法?

$('.myButton').click(function() { 
     $.get(ajaxUrl, function(hastoken) { 
      if(hastoken == 1) { 
       // do stuff here       
      } else { 

       window.open("http://www.google.com"); 
       // login 
      } 
     }); 
    }); 
+0

解決方法很簡單。不要使用彈出窗口。使用諸如[jQuery UI對話框](http://jqueryui.com/dialog/)之類的東西。 – Tomalak 2013-03-24 11:30:40

+0

:)偉大的解決方案,但我需要加載一個外部URL(登錄是通過instagram帳戶) – LobsterMan 2013-03-24 11:34:50

+1

您可以使用iframe。 – Tomalak 2013-03-24 11:36:16

回答

0

我建議使用的fancybox:(http://fancybox.net/

$('.myButton').click(function() { 
    $.get(ajaxUrl, function(hastoken) { 
     if(hastoken == 1) { 
      // do stuff here       
     } else { 

      $("#some_div").fancybox({ 
    'transitionIn' : 'elastic', 
    'transitionOut' : 'elastic', 
    'speedIn'  : 600, 
    'speedOut'  : 200, 
    'overlayShow' : false 
     }); 
     } 
    }); 
}); 
0

OK,這就是我想出了,非常感謝this answer。基本上,我將ajax調用封裝在同步封裝中,將windw.open保持在正確的級別。

$('.myButton').click(function() { 
    var hasToken = getResponse(url); 
    if(hastoken == 1) { 
     // do stuff here       
    } else { 
     window.open("http://www.google.com"); 
     // login 
    } 
}); 


function getResponse(strUrl) { 
    var strReturn = ""; 

    jQuery.ajax({ 
    url: strUrl, 
    success: function(html) { 
     strReturn = html; 
    }, 
    async:false 
    }); 

    return strReturn; 
} 
0

這可能會幫助你 - 這將打開一個樣的燈箱......

$('.myButton').click(function() { 
      $.get(ajaxUrl, function(hastoken) { 
       if(hastoken == 1) { 
        // do stuff here       
       } else { 

        var dialogDiv=$("<div></div>");        
      var $dialog = $(dialogDiv) 
      .load("Your Url to login form") 
      .dialog({ 
       autoOpen: false, 
       title: "Message Box", 
       width: 900, 
       modal: true, 
       buttons: { 
        "Close": function() {      
         $(this).dialog("close"); 
        } 
       } 
      }); 
      $dialog.dialog("open"); 

      return false; 
     } 

       } 
      }); 
     });