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
};