1

我有一个带有三个按钮的 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 始终设置。死链接当前将“否”传递给该函数。但是,我上面的所有问题都与活动链接和死链接有关。

下面是调用该函数的代码:

        $('a.chk').click(function (event) {
          if (check == false) {
                var addressValue = $(this).attr("href");
                //alert(addressValue);
                setConfirmUnload(false);
                event.preventDefault();
                return myFunction(addressValue);
          }
        });

我会很感激你的意见!

我搜索了类似的问题,但没有找到任何东西,但我可能错过了一个,因为我不知道如何搜索这个问题!

4

1 回答 1

1

尝试动态生成和销毁对话框

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 对话框的默认行为是在对话框附加到它后显示或隐藏对话框 Div。您可以使用旧方法(不破坏)进行测试,将其打开一次,然后检查 DOM,您应该会在正文末尾看到一个隐藏的 div。

结果,您第二次单击链接时,您使用第一次创建的对话框以及第一个链接的配置。

于 2013-04-17T14:20:50.037 回答