0

私は持っている

<a href="url" onclick="var msg = confirm('Confirm?'); submit(msg, event);">Click me</a>

私がやりたいことは、確認ボックスの結果 (true/false) を取得し、それを送信ボタンに渡し、false の場合は href 呼び出しを強制終了することです。

開発環境で動作していますが、これをクロス ブラウザー シナリオに読み込むと、2 番目の呼び出しが機能しません。

function submit(msg, evt) {

     if(msg == true) {
         $.ajax({
             type:"POST",
             data:{answer:'Correct'},
             url:'https://myurl/p'
          });
     }
     else { evt.preventDefault(); return false; }
}

渡された URL は単なる URL であり、(本番環境では) データはありません。この正確なコードは、私の環境では問題なく動作しますが、クロス ブラウザーのシナリオでは失敗します。確認ボックスを削除すると、すべてが完全に機能します。

確認ボックスのキャンセル時の preventDefault 呼び出しに関連しているように感じます。その preventDefault は、同じリンクでの次の呼び出しを無効にしますか?

4

2 に答える 2

1

まず、インライン イベント ハンドラーを使用しないでください。これをマークアップから削除し、それが属する js で処理できます。

HTML:

<a href="url" id="myanchor">Click me</a>

JS:

anchor = $('#myanchor')[0];
anchor.on('click',function(){
    var msg = confirm('Confirm?'); 
    submit(msg, event);
});

第 2 に、msg が true の場合、ajax 呼び出しはページ リダイレクトによって即座に中断されますが、これはあまり意味がありません。ajax 呼び出しが完了したら、リダイレクトを実行する必要があると思います。その場合は、次を使用する必要があります。

function submit(msg, evt) {

     if(msg == true) {
         $.ajax({
             type:"POST",
             data:{answer:'Correct'},
             url:'https://myurl/p',
             complete: function(){window.location="url";}
          });
     }
     evt.preventDefault();
     return false;
}
于 2012-10-31T17:14:00.767 に答える
0
<a href="url" ID="myUrlID">Click me</a>

$(function(){
    $("#myUrlID").click(function(event){
        event.preventDefault();

        var msg = confirm('Confirm?');

        if(msg == true) {
            $.ajax({
                type:"POST",
                data:{answer:'Correct'},
                url:'https://myurl/p'
            });
        }
    });
});
于 2012-10-31T17:19:53.570 に答える