0

如果我想获取一个表单,然后抓取一些按钮,然后将一些操作附加到提交我的表单的那个按钮上,我目前正在这样做:

<form>
  <button>Some Button</button>
</form>

$('form').find('button').click(function(){
  $(this).closest('form').submit();  // is there a better way of getting the form?
});

我想知道是否有一种更高效的方法可以在我的查找中选择原始表单元素。form有没有办法在其后代的点击事件中获取对我原始对象的引用,而不是必须遍历 dom ?

不幸的是,在这种情况下.context会给我button元素,我可以通过什么方式获得原始上下文?还是我只需要遍历?

请注意,这是一个人为的示例,我实际上并没有使用按钮和表单,但我更感兴趣的是在find.

4

4 回答 4

1

这取决于你想要做什么。如果您在事件回调中,不,没有办法获得原始选择。您拥有的唯一数据是单击了哪个元素,以及有关单击事件本身的一些详细信息。不要忘记form可以匹配多个不同的元素,因此不可能知道应该匹配哪一个。(除非只有一个 - 但它仍然不是一种非常稳定的网站编码方式。)

如果您只是在标准方法链接上下文中,则可以使用end在搜索中返回一个阶段:

$('form').find('button').prop({name: 'foo', value: 'bar'}).end().submit();
于 2011-05-24T21:13:56.040 回答
1

我认为关键是要缓存第一个电话?只需通过 each() 运行它,这将允许您将上下文存储在该方法的参数中。

$('form').each(function(idx,el){
   $(this).find('button').click(function(){
      $(el).submit();  
   });
});
于 2011-05-24T21:14:12.217 回答
0

据我所知,没有办法从找到的对象中引用搜索对象。这是因为您只会获得找到的 JQuery 对象,而不是来自被调用以找到它的函数的信息:

var blah = $('blah');

//The following variable will have no direct reference to blah, but 
//blah can still be used if it stays in scope:
var thingWithNoReferenceToBlah = blah.find('thing');
于 2011-05-24T21:28:14.380 回答
0

如果您只有一个表格,那么您可以执行以下操作:

var $form = $('form');
$form.find('button').click(function() {
    $form.submit();
});

只需计算$('form')一次并根据需要使用它。

我怀疑那$(this).closest('form')真的会那么贵。OTOH,好习惯就是好习惯,不要一遍又一遍地计算同一件事通常是一个好习惯。

于 2011-05-24T21:11:42.780 回答