在jQuery.extend()中使用$(this)
Using $(this) from within jQuery.extend()
我正在使用jQuery表单插件,并希望在每个form.ajaxify
上都使用该插件。所以我有这个:
$('form.ajaxify').ajaxForm(
// the options
);
使用HTML <form class="ajaxify" ...> ... </form>
。
现在,我有一些我想一直通过的选项,比如dataType:'json'
。除此之外,我希望能够在form
标签中添加更多选项,比如:
<form class="ajaxify" ... data-ajaxify-options='{"target":"#x"}'> ... </form>
根据.data()
上的文档,这是有效的。
所以我想我应该使用jQuery.extend()
。我试着这样说:
$('.ajaxify').ajaxForm(
jQuery.extend(
{
dataType: 'json'
},
$(this).data('ajaxify-options')
)
);
然而,这并不起作用:只传递文字对象,而不扩展任何内容。我假设这不起作用,因为$(this)
不再引用form.ajaxify
元素。这是正确的吗?通常情况下,可以将$(this)
存储在一个变量中,但这意味着要使代码复杂化,对吧?这在一条线上是不可能的。或者还有其他解决方案吗?
我想这不起作用,因为
$(this)
不再引用form.ajaxify
元素。这是正确的吗?
是的,尽管this
从未提及该元素。它只在jQuery调用的回调函数内部执行,但是您正在使用它来构建ajaxForm
调用的参数。this
将指this
上下文当前所指的任何内容。
通常情况下,可以将
$(this)
存储在一个变量中,但这意味着要使代码复杂化,对吧?
您可以将$('form.ajaxify')
存储在一个变量中,因为$(this)
没有意义,但是的,这就是它需要做的。不过,它并没有真正使代码"复杂化":
var form = $('.ajaxify');
form.ajaxForm($.extend({
dataType: 'json'
}, form.data('ajaxify-options')));
如果你想避免变量,你需要重复选择器,这是一种糟糕的做法。
对于适用于所选集合中多个表单的代码段,可以使用.each()
将该方法应用于可能具有不同选项的每个元素,现在可以在其回调中使用this
:
$('.ajaxify').each(function() {
// caching $this=$(this) is possible as well, but not as necessary
$(this).ajaxForm($.extend({
dataType: 'json'
}, $(this).data('ajaxify-options')));
});
- jQuery(this).Pparent().Pparente().Prent().find()在iPad上不起作用
- jQuery使用ajax自动完成问题-TypeError:this.source不是函数
- jquery$(this)对象缺少问题
- jQuery:具有class但不具有$(this)的元素
- jQuery的等价物's$(this)在Ractive.js事件代理中
- jQuery$(this)引用未定义
- jQuery双对象构造函数-例如$($(this))
- 在jQuery中正确使用$(this)
- jQuery“this”范围问题
- $(this)正在提醒jquery中以前选择的值
- How can I get and replace this in javascript ( jquery?
- Javascript Object - using jQuery and this
- 将jQuery选择器与“this”相结合
- jQuery(this) 目標不是找到元素
- 如何在嵌套的 .each()(s) 中正确使用“this”?(JQuery)
- Turn '$(this)' jquery to javascript 'this'
- 访问javascript native "this"jQuery内部
- 使用“this"jQuery插件的内部命名函数
- 设置'this'JQuery方法中匿名函数的上下文
- 绑定函数,包含"this"(JQuery)