jQuery Получить оригинальный контекст из находки - PullRequest
0 голосов
/ 25 мая 2011

Если я хочу получить форму, затем захватить некоторую кнопку, а затем приложить какое-то действие к той кнопке, которая отправляет мою форму, я сейчас делаю это так:

<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, есть ли способ получить ссылку на мой оригинальный form объект внутри события click его потомка?

К сожалению, .context даст мне элемент button в этом случае, каким образом я могу получить исходный контекст? Или мне просто нужно пройти вверх?

Обратите внимание, что это надуманный пример, на самом деле я не использую кнопки и формы, но меня больше интересует выборка исходного контекста внутри find.

Ответы [ 4 ]

1 голос
/ 25 мая 2011

Это зависит от того, что вы пытаетесь сделать. Если вы находитесь в обратном вызове события, нет, нет способа получить исходный выбор. Единственные данные, которые у вас есть, это то, какой элемент был нажат, и несколько подробностей о самом событии щелчка. Не забывайте, что form может соответствовать нескольким различным элементам, поэтому знать, с каким из них вы должны соответствовать, невозможно. (Если только не один - но это все еще не очень стабильный способ кодирования вашего сайта.)

Если вы находитесь в стандартном контексте цепочки методов, вы можете использовать end, чтобы вернуться на один шаг назад в поиске:

$('form').find('button').prop({name: 'foo', value: 'bar'}).end().submit();
1 голос
/ 25 мая 2011

Думаю, смысл кешировать первый звонок? Просто запустите его через each (), что позволит вам сохранить контекст в параметрах этого метода.

$('form').each(function(idx,el){
   $(this).find('button').click(function(){
      $(el).submit();  
   });
});
0 голосов
/ 25 мая 2011

Насколько я знаю, нет способа ссылаться на поисковый объект из найденного объекта. Это потому, что вы получите только найденный объект 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');
0 голосов
/ 25 мая 2011

Если у вас есть только одна форма, вы можете сделать что-то вроде этого:

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

Просто вычислите $('form') один раз и используйте его при необходимости.

Я сомневаюсь, что $(this).closest('form') действительно будет так дорого, хотя. OTOH, хорошие привычки - это хорошие привычки, а не вычислять одно и то же снова и снова - это обычно хорошая привычка.

...