Javascript $(文档).on';行不通
我正在尝试重构我的旧JavaScript+jQuery代码。所以我将它们分成小块,以便于维护 在我以前的“过程”代码中,Javascript $(文档).on';行不通,javascript,jquery,Javascript,Jquery,我正在尝试重构我的旧JavaScript+jQuery代码。所以我将它们分成小块,以便于维护 在我以前的“过程”代码中,(document).on()方法对每个元素都有效。但现在它只对第一个元素起作用 Dnianas.Post = { init: function() { this.cache(); this.bindEvents(); }, cache: function() { this.postForm = $
(document).on()
方法对每个元素都有效。但现在它只对第一个元素起作用
Dnianas.Post = {
init: function() {
this.cache();
this.bindEvents();
},
cache: function() {
this.postForm = $('#postForm');
this.likeButton = $('#likePost');
},
bindEvents: function() {
$(document).on('submit', this.postForm, this.createPost);
},
createPost: function(event) {
var request = $.ajax(
{
url: '/posts/create',
data: $(this).serialize(),
beforeSend: function() {
$loading.show();
},
complete: function() {
$loading.hide();
}
});
request.done(function(data) {
self.renderCreatedPost(data);
});
event.preventDefault();
},
这是我向数据库发送文本的代码。当我发送请求时,没有数据会传递到服务器。没什么
这是我的旧代码,有效
$body.on('submit', '#postForm', function (event) {
$.ajax({
url: '/posts/create',
type: 'POST',
dataType: 'JSON',
data: $(this).serialize(),
beforeSend: function() {
$loading.show();
},
complete: function() {
$loading.hide();
}
})
.done(function (data) {
if (data.success == 'false') {
// Render some error
} else {
// Post it
}
});
event.preventDefault();
});
我不知道为什么,有人能解释一下吗
正如我在旧代码中所说,它工作得非常完美 我认为从来没有一个版本的jQuery支持您在新代码中所做的工作 您的代码正在调用
cache
,然后调用bindEvents
。您在缓存中有以下内容:
this.postForm = $('#postForm');
在bindEvents
中:
$(document).on('submit', this.postForm, this.createPost);
这意味着您正在对
调用,并向其传递事件名称、jQuery对象和函数
请看,
上没有允许jQuery对象作为第二个参数的签名
我看到您现在已经发布了旧代码,它在那里使用了选择器字符串,它确实通过事件委派工作:
$(document).on('submit', '#postForm', this.createPost);
如果您希望在不使用委托的情况下处理元素本身的提交,那么它当然是:
this.postForm.on('submit', this.createPost);
您必须发布一个完整的示例,包括如何调用这些函数。另外,如果有错误,请说明您在浏览器的错误控制台中看到的错误。我只是在页脚中调用
Dnianas.Post.init()
。一切都是自我解释的。我的控制台中没有任何错误。数据未传递,仅此而已。您可能需要a)删除此示例中与文档没有直接关系的所有代码。在()
,b)发布调用此代码的代码,可能还有任何重要的HTML,以及c)查看文档是否在(“提交”
没有捕捉到提交事件,或者一旦捕捉到事件就做了错误的事情。谢谢!我很困惑。