gpt4 book ai didi

javascript - 如何将 jQuery 触发事件传递给函数

转载 作者:行者123 更新时间:2023-12-02 18:19:58 24 4
gpt4 key购买 nike

我正在尝试使用 jasmine 测试一些 javascript 代码(BackBone View)

这是我正在尝试测试的已定义 BackBone View 中的函数:

var aView = Backbone.View.extend({

events: {
'click #btn': 'update'
}

update: function(e){
e.preventDefault();
$.ajax({
....
});
}

});

因此,为了测试该函数,我尝试调用该函数,然后监视 $.ajax 以查看是否使用适当的 url 调用它。但是,问题是我无法将事件传递到函数中以便它执行 ajax。

这是 Jasmine 代码块:

it("tests update ajax", function() {

spyOn($, "ajax");

//Call update function
this.aView.update(this.aView.$("#btn").trigger("click"));

expect($.ajax).toHaveBeenCalled();

});

这是我当前收到的错误:

TypeError: Object [object Object] has no method 'preventDefault'

我希望我已经提供了所有必要的信息并且问题是准确的:)

最佳答案

您不应直接调用更新方法。如果您触发事件,它将调用更新方法,它将起作用。

以下内容应该可以消除您当前的错误:

it("tests update ajax", function() {

this.aView.$el.find('.update').trigger("update");
this.aView.update(this.aView.$("#btn").trigger("click"));

});

如果你的 View 有这个:

var aView = Backbone.View.extend({

events: {
'click a.update' : 'update'
},

update: function(e){
e.preventDefault();
$.ajax({
....
});
}
});

您还可以检查您的 View 事件设置是否正确。

关于javascript - 如何将 jQuery 触发事件传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com