используя селектор jQuery с элементом dom - PullRequest
4 голосов
/ 21 августа 2011

У меня есть функция javascript, которая получает элемент dom в качестве параметра. В этой функции я пытаюсь добраться до ближайшего предка «формы». Я хотел использовать:

function submit_form(obj)
{
    var form1 = $(obj).closest("form");
    alert (form1.id);
}

здесь obj - это элемент dom типа submit. Я просто не понимаю, как это работает.
Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 21 августа 2011

Вы хотите

function submit_form(obj)
{
    var form1 = $(obj).closest("form")[0];  
    alert (form1.id);
}

Результатом функций выбора / обхода jQuery всегда является массив, возможно, только с одним элементом, но все же массив Индексируйте в массив, чтобы получить фактические элементы DOM.

Однако вы можете сделать это без jQuery, если obj является элементом input / select / textarea.

function submit_form(obj)
{
    var form1 = obj.form;  
    alert (form1.id);
}

Ради полноты вы также можете остаться в JQuery и сделать

function submit_form(obj)
{
    var $form1 = $(obj).closest("form");
    alert ( $form1.attr("id") );
}
1 голос
/ 21 августа 2011

form1 будет объектом jQuery, поэтому вы можете использовать .attr("id") или получить доступ к самому элементу DOM, используя [0].id:

var form1 = $(obj).closest("form");
alert(form1.attr("id"));

var form2 = $(obj).closest("form")[0];
alert(form2.id);
1 голос
/ 21 августа 2011
function closest(obj, tagName) {

   // Go up in the tree until you find the ancestor form
   while (obj.parent !== null) {
      if (obj.nodeType === 1) {
         parent = obj.parentNode;
         if (parent.tagName === tagName) {
            return parent;
         }
      }   
   }

   // If no form exists return null
   if (obj.tagName !== tagName) {
      return null;
   }
}

Используйте это таким образом

var closestForm = closest(obj, 'FORM')
...