延迟href执行单击直到ajax调用

时间:2014-11-06 12:07:44

标签: javascript ajax backbone.js href

在Backbone视图中,是否可以延迟执行锚点href上的点击直到ajax调用完成?

我需要的是:

  1. 用户点击一个href;
  2. 点击后,会触发ajax调用;
  3. 如果ajax调用成功,那么应该只执行href;
  4. 我做了一个测试,将一个方法添加到Backbone视图,链接到一个锚点:

        clickNext: function(e){ 
    
            setTimeout(function(){
                console.log("test"); 
            }, 5000); 
    

    不幸的是,href在超时完成之前执行。

    我之所以需要这个,是因为我想开发一个向导,其中每个页面都有一个单独的URL;我在每个页面加载上使用localstorage执行检查,并在每次“下一步”单击时执行持久存储(Ajax)。

1 个答案:

答案 0 :(得分:1)

要防止原始点击触发位置更改,请使用e.preventDefault(),然后您可以使用完成或成功回调,当ajax调用成功时,手动更改窗口哈希位置。

myApp.Views.ExampleView = Backbone.View.extend({
    el: "#myView",
    events: {
        "click a": "handleLink"
    },
    handleLink: function (e) {
        e.preventDefault();
        var link = $(e.currentTarget).attr('href');
        $.ajax("/echo/json/")
            .done(function () {
            location.hash = link
        })
    }
});

var myView = new myApp.Views.ExampleView();

小提琴 - http://jsfiddle.net/leighking2/hjcg77h2/