1

3 つのボタンがある jquery ダイアログ ボックスがあります。ユーザーがリンクをクリックしたときに、href を変数に取り込み、リンクが実行されないようにし、保存、破棄、またはキャンセルのオプションを含むダイアログ ボックスを表示したいと考えています。保存または破棄時に、クリックしたリンクに移動したい。私はphp/jqueryで作業しています。

ユーザーがリンク「A」をクリックし、ダイアログボックスでキャンセルをクリックし、リンク「B」をクリックしてダイアログボックスで破棄を選択した場合を除いて、すべてがうまく機能しています。ブラウザは「B」ではなくリンク「A」に移動します"!

私は何を間違っていますか?

これが私のコードです。以下で詳しく説明します。

        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);
          }
        });

ご意見をお待ちしております。

同様の問題を検索しましたが、何も見つかりませんでしたが、この問題を検索する方法がわからないため、見落としている可能性があります。

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 が表示されるはずです。

その結果、2 回目にリンクをクリックすると、最初に作成されたダイアログが最初のリンクの構成で使用されます。

于 2013-04-17T14:20:50.037 に答える