Javascript 如何从属性中获取表单Id

Javascript 如何从属性中获取表单Id,javascript,jquery,html,Javascript,Jquery,Html,我有以下表格: <form id="formId"> <!-- some tags --> <div> <!-- some other divs or something else --> <input type="radio" onclick="handler(this) /> </div> </form> 如何获得所附表格的id?假设网页上只有

我有以下表格:

<form id="formId">
    <!-- some tags -->
    <div>
        <!-- some other divs or something else -->
            <input type="radio" onclick="handler(this) />
    </div>
</form>
如何获得所附表格的id?假设网页上只有一个表单

我正在寻找纯js和jQuery解决方案。

您需要:

1) 为elem创建jquery对象

2) 使用
.closest('form')

3) 使用
.attr('id')
获取id

$(elem).closest('form').attr('id');//will return "formId" in defined click handler

纯JS解决方案:

var handler=函数(elem){
//init();
var clicked=elem.form.getAttribute('id');
警报(单击);
};

您可以制作这样的乱七八糟的代码

var handler = function(elem){
    init();
    var searching = true;
    var tempElem = elem;
    while(searching)
    {
        //added check to make sure there is a parentNode as suggested by @Patrick Roberts
        tempElem = tempElem.parentNode || false;
        if(tempElem)
        {
            //added to lower case as corrected by @Patrick Roberts
            if(tempElem.nodeName.toLowerCase() == "form")conversion
                searching = false;
        }
        else
            searching = false;//EDIT: if there is no form node then it will also stop searching
    }
    formElem = tempElem || {"id" :"no form found"};
    var clicked = formElem.id;//here should be form id
    //other staff
};
基本上做一个while循环,继续沿着元素链向上移动,直到找到一个表单元素

表单中的每个
元素都有一个包含它们所在的
元素的元素;
.id
是任何元素的属性

var handler=函数(elem){
var clicked=elem.form.id;
警报(单击);
};


顺便说一句,另一个答案中的纯JS示例工作得很好。@milindiantwar你知道你可以将该演示粘贴到你的答案中,对吧?我的意思是嵌入答案中,而不是链接到答案中。但对每一个人来说,都是他自己的。谢谢。确切地说,为什么您应该使用
.getAttribute()
@PatrickRoberts来明确说明您的意图。我认为您不应该让输入元素的名称与标准元素属性(如id)冲突。我认为您不应该使用已建立的属性;只是对于特定的表单(但可能不是唯一的),该属性可能会被单个输入元素破坏。
if(templem.nodeName.toLowerCase()=“form”)
。引用在HTML中为大写,在X(HT)ML中仅为小写。此外,如果到达顶部时未找到表单元素,则在
while
循环终止之前,将出现
ReferenceError
。一旦
tempElem
为false,则更正后的代码将永远不会终止<代码>搜索
在这种情况下永远不会设置为false。我明白了。将添加一个“其他”
var handler = function(elem){
    init();
    var searching = true;
    var tempElem = elem;
    while(searching)
    {
        //added check to make sure there is a parentNode as suggested by @Patrick Roberts
        tempElem = tempElem.parentNode || false;
        if(tempElem)
        {
            //added to lower case as corrected by @Patrick Roberts
            if(tempElem.nodeName.toLowerCase() == "form")conversion
                searching = false;
        }
        else
            searching = false;//EDIT: if there is no form node then it will also stop searching
    }
    formElem = tempElem || {"id" :"no form found"};
    var clicked = formElem.id;//here should be form id
    //other staff
};