onclick中的两个函数 - 第二个Ajax调用(跨浏览器)

时间:2012-10-31 17:08:23

标签: javascript html ajax cross-browser

我有

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

我想要做的是获取确认框结果(true / false),将其传递给提交按钮,然后如果错误则终止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是否会禁用下一个使用相同链接的呼叫?

2 个答案:

答案 0 :(得分: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为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;
}

答案 1 :(得分: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'
            });
        }
    });
});