将jQuery$(this)与.on()一起使用;

将jQuery$(this)与.on()一起使用;,jquery,Jquery,我正在构建一个插件,用jQuery提交表单 它需要使用活动元素,所以我需要使用$(document).on() 以下是我试图实现的一个示例: $.fn.submittable = function() { $(document).on('submit', this, function(event) { event.preventDefault(); //Do whatever }); }; $(document).ready(function() { $('.tosu

我正在构建一个插件,用jQuery提交表单

它需要使用活动元素,所以我需要使用
$(document).on()

以下是我试图实现的一个示例:

$.fn.submittable = function() {
  $(document).on('submit', this, function(event) {
    event.preventDefault();
    //Do whatever
  });
};
$(document).ready(function() {
  $('.tosubmit').submittable();
});
但是
$(这个)
似乎不适用于
.on()

如果我这样做,
$(this.submit)(函数(事件){})工作正常


我做错了什么吗?

委托版本的
.on
要求
选择器
参数是字符串,而不是元素(或者在您的情况下,是jQuery对象,这就是jQuery插件中的

然而,为什么要使用委托呢

$.fn.submittable = function() {
    return this.on('submit', function(event) {
        event.preventDefault();
        ...
    });
};

然后在每次AJAX调用后对新加载的内容调用它。

委托版本的
。on
要求
选择器
参数是字符串,而不是元素(或者在您的情况下,是jQuery对象,即jQuery插件中的

然而,为什么要使用委托呢

$.fn.submittable = function() {
    return this.on('submit', function(event) {
        event.preventDefault();
        ...
    });
};

然后在每次AJAX调用后对新加载的内容调用它。

使用
selector
属性获取用于创建jQuery对象的选择器:

$.fn.submittable = function() {
  $(document).on('submit', this.selector, function(event) {
    event.preventDefault();
    //Do whatever
  });
};
注意:这使插件的工作方式与jQuery
live
方法相同。这种绑定事件的方式被放弃了,因为语法有点笨拙,可能会造成混乱。您应该考虑使用一种更类似于<>代码>的代码,在方法中用于委派:

$.fn.submittable = function(selector) {
  this.on('submit', selector, function(event) {
    event.preventDefault();
    //Do whatever
  });
};
用法示例:

$(document).submittable('.tosubmit');

使用
selector
属性获取用于创建jQuery对象的选择器:

$.fn.submittable = function() {
  $(document).on('submit', this.selector, function(event) {
    event.preventDefault();
    //Do whatever
  });
};
注意:这使插件的工作方式与jQuery
live
方法相同。这种绑定事件的方式被放弃了,因为语法有点笨拙,可能会造成混乱。您应该考虑使用一种更类似于<>代码>的代码,在方法中用于委派:

$.fn.submittable = function(selector) {
  this.on('submit', selector, function(event) {
    event.preventDefault();
    //Do whatever
  });
};
用法示例:

$(document).submittable('.tosubmit');

我不确定我对这个问题解释得是否充分。对这个问题的回答表明这是一种不好的做法,我不知道为什么。然而,我刚刚找到了解决办法,现在一切都清楚了

当使用带有实时内容的插件时,必须将插件加载到
$.post
.get
函数中,如下所示

$.post('.').done(function(data) {
  $('.to-call-on').plugin();
});

我不确定我对这个问题解释得是否充分。对这个问题的回答表明这是一种不好的做法,我不知道为什么。然而,我刚刚找到了解决办法,现在一切都清楚了

当使用带有实时内容的插件时,必须将插件加载到
$.post
.get
函数中,如下所示

$.post('.').done(function(data) {
  $('.to-call-on').plugin();
});


您需要了解此
是什么。“我有,这似乎也不起作用。”“杰布兰查德,我认为这个问题与这里无关。在插件的上下文中,
this
是jQuery对象,而不是DOM元素
$(this.submit(函数(事件){})
如果这很好,那么就使用它,为什么要寻找事件委派呢?@Jai原则上,我建议现代jQuery代码应该始终使用
.on()
进行事件注册,并使用适当的
.trigger
调用进行事件模拟。使用相同的方法(例如,
。单击
)同时执行这两种操作会导致混淆。您需要了解这是什么。“我有,这似乎也不起作用。”“杰布兰查德,我认为这个问题与这里无关。在插件的上下文中,
this
是jQuery对象,而不是DOM元素
$(this.submit(函数(事件){})
如果这很好,那么就使用它,为什么要寻找事件委派呢?@Jai原则上,我建议现代jQuery代码应该始终使用
.on()
进行事件注册,并使用适当的
.trigger
调用进行事件模拟。使用相同的方法(例如,
.click
)同时执行这两种操作会造成混乱。op表示它必须使用活动元素,而活动元素应该是动态添加的元素。如果是这样,这就是为什么要使用委托。我正在构建一个AJAX web应用程序,其中大多数表单都是活动的。而且,几乎所有表单都是通过AJAX提交的。我发现自己为每个表单都编写了一个函数。这就是“AJAX”表单所需要做的一切,就是添加一个类并调用插件。@Guffa我错过了“live”部分,但是没有插件会自动附加到尚未创建的元素上。创建元素时(必须由程序员控制),应该调用插件。@Guffa其推论是,如果插件不是特定于某个元素,那么它可能根本就不应该是
$。fn
插件。我说得太快了,当表单位于加载了jQuery的页面上时,通过
.post(),这不起作用。op说它必须与活动元素一起工作,而活动元素应该是动态添加的元素。如果是这样,这就是为什么要使用委托。我正在构建一个AJAX web应用程序,其中大多数表单都是活动的。而且,几乎所有表单都是通过AJAX提交的。我发现自己为每个表单都编写了一个函数。这就是“AJAX”表单所需要做的一切,就是添加一个类并调用插件。@Guffa我错过了“live”部分,但是没有插件会自动附加到尚未创建的元素上。创建元素时(必须由程序员控制),应该调用插件。@Guffa其推论是,如果插件不是特定于某个元素,那么它可能根本就不应该是
$。fn
插件。我说得太快了,当表单位于加载了jQuery的页面上时,通过
.post(),这不起作用。这到底是怎么回事。
.selector
在jQuery 1.7中被弃用了@阿尔尼塔克:这并不意味着它消失了。无论如何,我还添加了一种替代语法,它不使用
选择器