将jQuery$(this)与.on()一起使用;
我正在构建一个插件,用jQuery提交表单 它需要使用活动元素,所以我需要使用将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
$(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
});
};
注意:这使插件的工作方式与jQuerylive
方法相同。这种绑定事件的方式被放弃了,因为语法有点笨拙,可能会造成混乱。您应该考虑使用一种更类似于<>代码>的代码,在方法中用于委派:
$.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
});
};
注意:这使插件的工作方式与jQuerylive
方法相同。这种绑定事件的方式被放弃了,因为语法有点笨拙,可能会造成混乱。您应该考虑使用一种更类似于<>代码>的代码,在方法中用于委派:
$.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中被弃用了@阿尔尼塔克:这并不意味着它消失了。无论如何,我还添加了一种替代语法,它不使用选择器