我有一个带有三个按钮的jquery对话框。当用户单击链接时,我希望将href捕获到一个变量中,防止链接执行,并显示带有保存、丢弃或取消选项的对话框。在保存或丢弃时,我想导航到他们点击的链接。我在php/jquery工作。
一切都很好,除了如果用户点击链接"a",然后点击对话框上的"取消",然后点击链接"B"并选择对话框上的"丢弃",浏览器导航到链接"a"而不是"B"!
我做错了什么?
这是我的代码,我将在下面解释更多:
function myFunction(href) {
if (check == false) {
alert (href);
$('#replaceSave').hide();
$( "#tabWarn" ).dialog( "open" );
$(function() {
alert (href);
$( "#tabWarn" ).dialog({
resizable: false,
height:240,
width:400,
modal: true,
buttons: {
Cancel: function() {
check = false;
setConfirmUnload(true);
$( this ).dialog( "close" );
},
"Discard": function() {
alert(href);
check = true;
setConfirmUnload(false);
alert(href);
if (href != 'no') {
window.location.href = href;
}
$( this ).dialog( "close" );
},
"Save": function() {
saveFunction();
if (href != 'no') {
setTimeout(function() { window.location.href = href; }, 2000);
}
$('#replaceSave').show();
setTimeout(function() { $( '#tabWarn' ).dialog( "close" ); }, 2000);
},
}
});
});
}
}
href的第一个警报总是显示正确的地址。当我点击链接"A",然后选择取消,所有的警报显示"A"。但当我返回点击链接"B"并选择丢弃时,所有的警报都显示链接"B",除了丢弃按钮内的警报——它们显示链接"A"。因此,即使我点击了"B",页面也会导航到链接"A"。
如果我先点击链接"B"并选择丢弃,它会正确工作。只有当我选择取消,然后再次点击并选择另一个链接时,它才会不正确。
仅供参考,href总是设置的。死链接目前传递'no'给函数。然而,我上面所有的问题都是关于活链接和死链接的。
下面是调用函数的代码: $('a.chk').click(function (event) {
if (check == false) {
var addressValue = $(this).attr("href");
//alert(addressValue);
setConfirmUnload(false);
event.preventDefault();
return myFunction(addressValue);
}
});
谢谢你的建议!
我已经搜索了类似的问题,并没有找到任何东西,但我可能错过了一个,因为我不知道如何搜索这个问题!
尝试动态生成和销毁对话框
function customConfirm(msg, href) {
var container = $("<div/>").append(msg);
$( container ).dialog({
// your dialog stuff
close: function () {
$(this).remove();
}
});
}
// If you want to keep your #tabWarn
customConfirm($("#tabWarn").html(),href);
// If you want some custom msg
customConfirm("Are you sure you want to do that?",href);
至于为什么会发生:jquery ui dialog的默认行为是显示或隐藏对话框Div,一旦对话框被附加到它。您可以使用旧的方法(不销毁)来测试这一点,打开它一次,然后检查DOM,您应该在正文的末尾看到一个隐藏的div。
因此,第二次单击链接时,您将使用第一次创建的对话框,并使用第一个链接的配置。