0

我有

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

我想要做的是获取确认框结果(真/假),将其传递给提交按钮,然后如果它为假则终止 href 调用。

我让它在我的开发环境中工作,但是当我将它加载到跨浏览器场景中时,第二个调用不起作用:

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

其次,如果 msg 为真,则 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 回答