2011-08-21 153 views
3

我有一個JavaScript函數接收一個DOM元素作爲參數。在這個函數中,我試圖找到最接近祖先的「形式」。我想用:使用jQuery選擇器與DOM元素

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

這裏obj是提交類型的dom元素。我似乎沒有得到它的工作。
有人能幫忙嗎?

回答

2

你想

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

的jQuery選擇器/遍歷功能結果總是是一個數組,可能只有一個元素,但仍然是一個數組。索引到數組中以獲取實際的DOM元素。

但是,只要obj是input/select/textarea元素,就可以在不使用jQuery的情況下執行此操作。

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")); 
} 
+0

你是天才!謝謝;)我必須再等3分鐘才能將此答案標記爲正確! –

1
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') 
1

form1將是一個jQuery對象,因此您可以使用.attr("id")或使用[0].id訪問DOM元素本身:

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

var form2 = $(obj).closest("form")[0]; 
alert(form2.id); 
+0

感謝隊友......你的想法確實奏效! –