2011-06-08 16 views
8
$('form').each(function(){ 
    var form = this; 
    $('a', this).click(function(){ form.submit(); }); 
}); 

bir ara değişkeni kullanmadan ben o tıklama işlev içinde ebeveyn (this) eleman almak bir yolu var mı? Bunun farkında olduğumu bilmediğim bir anahtar kelime olduğunu düşünüyorum.jQuery - ebeveyn "Bu"

$ .ajax işlevinde, böyle bir şey yapmanıza izin veren context parametresi vardır.

+1

Bu sadece "biçim" değil midir? – Femi

+0

"$ ('a', this) .click (function() {$ (this) .closest ('form') .spot();}) kullanamazsınız. özlü/özel cevap? –

cevap

7

Hayır, bunu en iyi şekilde yaptınız. Kongre bu kullanarak önerir: a beri

var that = this; 
$('a', this).click(function(){ that.submit(); }); 
+0

Veya kendi. var self = this; –

+1

Şahsen, bu kongre hoşuma gitmiyor. Kodun okunmasıyla ilgili açıklayıcı bir ad ('form 'gibi) kullanmak çok daha üstündür. – lonesomeday

+0

Bu, "... bir ara değişken kullanmadan" – Matt

2

form bir çocuktur, kullanabileceğiniz closest:

$('a', this).click(function(){ $(this).closest('form').submit(); }); 

Başka bir seçenek proxy geçerli:

$('a', this).click($.proxy(function(){ this.submit(); }, this)); 
+0

'$ .proxy' işlevini kullanmanın tek sorunu, olay işleyicisindeki olağan' bu 'başvurusuna gönderme yeteneğini kaybetmenizdir. – Josh

+0

@ user349433 - true, ancak bir etkinlik parametresi de geçirip "target" i işaretleyebilirsiniz. Bu senaryoda – Matt

+0

'en yakınını' tercih ederim. Bunun için DOM'a gitmek bir hata olduğunu düşünüyorum. Hata ayıklaması kolay olsa da, hiyerarşi değiştiğinde ve daha önce seçtiğiniz bir öğeye yeniden geçiş yaparak komut dosyasını vergilendiriyorsanız kırılır. Soyutlamada kalmak daha iyidir. – glortho

1

Sen başvurmak gerekir jquery'nin ebeveyni ile (veya bir etiketin nasıl yuvalandığına bağlı olarak ebeveynler) seçiciye

Yani böyle bir şey çalışması gerekir:

$('form').each(function(){ 
    $('a', $(this)).click(function(){ $(this).parent('form').submit(); }); 
}); 
2

Emin - bir kapatma kullanın.

$('form').each(function() { 
    $('a', this).click((function(x) { return function() { x.submit(); })(this)); 
}); 

(tek jQuery yerleşik pek emin değildi, Prototip benzer) bir curry işlevi varsa, o orta çizgisiyle biraz kolaylaştırabilirsiniz:

$('a', this).click(curry(function(x) { x.submit(); }, this)); 
2

Öncelikle, sizin Örnek haklı, ikincisi, çoğu insan bunu böyle yapardı. Anahtar kelime yok, sadece yönü ters çeviriyor ve DOM'u en olası ebeveyn için geçiyor (zaten bulduğunuzdan beri aptalca oluyor, değil mi?). Bu durumda, diğer yanıtlayanlar closest'u nasıl kullanacaklarını doğru göstermiş olsalar bile, bir ara değişken öneririm. (Ayrıca, bir <form> içinde <form> geçersiz HTML olduğunu, biraz da teknik bir dayanmaktadır. Hiçbir çocuğu öbür tarafa etmediğini bir <div> gibi şeyler için garanti yok sonraki <a> arayan <div> s.)

$("#parent").something(function() { 

    var _this = this; 
// var self = this; 
// var that = this; 
// var someMoreMeaningfulName = this; 

    $("#child", this).somethingElse(function() { 
     $(_this).somethingEvenElser(); 
     ... 
    }); 
}); 

Okuması güzel şey değil, ama desen kolayca tanınabilir var kadar sık ​​görülmektedir:

jQuery olarak böyle bir sürü bakın. _this (alt çizgi özel değişkenleri imalatabilir), self (aslında değil), vb. Gibi şeyler yerine (var form) ne yaptığınızı tavsiye ederim