$('form').each(function(){
var form = this;
$('a', this).click(function(){ form.submit(); });
});
有没有办法在不使用中间变量的情况下获取该click函数内的父(this
)元素?我在想,也许有一个我不知道的关键字让你这么做。
在$ .ajax函数中有一个context
参数,允许你做这样的事情。
答案 0 :(得分:7)
不,你已经做到了最好的方式。公约建议使用:
var that = this;
$('a', this).click(function(){ that.submit(); });
答案 1 :(得分:2)
由于a
是form
的孩子,您可以使用closest
:
$('a', this).click(function(){ $(this).closest('form').submit(); });
另一个选项是proxy
:
$('a', this).click($.proxy(function(){ this.submit(); }, this));
答案 2 :(得分:2)
当然 - 使用封闭装置。
$('form').each(function() {
$('a', this).click((function(x) { return function() { x.submit(); })(this));
});
如果你有一个curry
函数(类似于Prototype中的函数,不确定是否内置于jQuery中),你可以稍微简化一下中间行:
$('a', this).click(curry(function(x) { x.submit(); }, this));
答案 3 :(得分:2)
首先,你的榜样是正确的,其次,这是大多数人都会这样做的。没有关键字,只是为最可能的父级转换方向并遍历DOM(这是愚蠢的,因为你已经找到了,对吧?)。在这种情况下,我建议使用一个中间变量,即使其他回答者已经正确地展示了如何使用closest
。 (另外,它在某种程度上依赖于技术性,<form>
内的<form>
是无效的HTML。不能保证像<div>
这样的东西不会跨越任何孩子<div>
正在寻找下一个<a>
。)
在jQuery中你会看到很多这样的东西:
$("#parent").something(function() {
var _this = this;
// var self = this;
// var that = this;
// var someMoreMeaningfulName = this;
$("#child", this).somethingElse(function() {
$(_this).somethingEvenElser();
...
});
});
这不是最令人讨厌的东西,但这种模式经常发生,很容易识别。我有点推荐你正在做的事情(var form
),而不是_this
(下划线可能暗示私有变量),self
(实际上不是)等等。
答案 4 :(得分:1)
您应该可以使用jquery的父级(或父级,具体取决于标记的嵌套方式)选择器
所以这样的事情应该有效:
$('form').each(function(){
$('a', $(this)).click(function(){ $(this).parent('form').submit(); });
});