我正在编写一个脚本,当单击按钮时,将通过ajax检查用户是否已登录,如果是,则在不离开页面的情况下执行某些操作。如果用户未登录,我想打开一个登录窗口弹出窗口。问题是因为window.open()不是直接在'click'事件下,它会被弹出窗口阻止程序阻止。如果我将window.open放在点击操作下,它就可以正常工作。
有什么方法吗?
$('.myButton').click(function() {
$.get(ajaxUrl, function(hastoken) {
if(hastoken == 1) {
// do stuff here
} else {
window.open("http://www.google.com");
// login
}
});
});
答案 0 :(得分: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
});
}
});
});
答案 1 :(得分:0)
好的,这是我想出的,非常感谢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;
}
答案 2 :(得分: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;
}
}
});
});