如果我想获取一个表单,然后抓住一些按钮,然后将一些动作附加到提交我的表单的那个按钮,我现在正在这样做:
<form>
<button>Some Button</button>
</form>
$('form').find('button').click(function(){
$(this).closest('form').submit(); // is there a better way of getting the form?
});
我想知道在我的查找中是否有更高效的方法来选择原始表单元素。而不是必须遍历dom,有没有办法在其后代的click事件中获取对原始form
对象的引用?
不幸的是.context
在这种情况下会给我button
元素,我能以任何方式获得原始上下文吗?或者我只需要遍历?
请注意,这是一个人为的例子,我实际上并没有使用按钮和表单,但我更感兴趣的是在find
中获取原始上下文。
答案 0 :(得分:1)
这取决于你要做的事情。如果您在事件回调中,不,则无法获得原始选择。您拥有的唯一数据是单击了哪个元素,以及有关单击事件本身的一些详细信息。不要忘记form
可以匹配多个不同的元素,因此知道哪一个你应该匹配是不可能的。 (除非只有一个 - 但它仍然不是一种非常稳定的网站编码方式。)
如果您只是使用标准方法链接上下文,则可以使用end
在搜索中返回一个阶段:
$('form').find('button').prop({name: 'foo', value: 'bar'}).end().submit();
答案 1 :(得分:1)
我认为重点是缓存第一个电话?只需通过each()运行它,这将允许您在该方法的参数中存储上下文。
$('form').each(function(idx,el){
$(this).find('button').click(function(){
$(el).submit();
});
});
答案 2 :(得分:0)
如果你只有一个表格,那么你可以这样做:
var $form = $('form');
$form.find('button').click(function() {
$form.submit();
});
只需计算$('form')
一次,然后根据需要使用它。
我怀疑$(this).closest('form')
真的会变得那么贵。 OTOH,良好的习惯是良好的习惯,而不是一遍又一遍地计算同样的东西通常是一个好习惯。
答案 3 :(得分: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');