jQuery将input name = id元素映射到form.id属性,为什么?

时间:2014-05-19 15:23:39

标签: jquery html

我有html表单,其中包含name = id的输入标记 出于某种原因,jQuery将此字段映射到表单id属性。 如果你查看下面的简单html,你会发现

$('#f1')[0].id = [input element]#inputid
$('#f2')[0].id = "f2"

有人知道为什么,或者它是一个bug,并且有人知道jquery将name = id元素映射到表单的位置吗?

<html>
<head>
    <title>Strange jQuery FORM.id behavior</title>
    <script src="http://code.jquery.com/jquery-1.11.0.min.js" type=
    "text/javascript"></script>
</head>

<body>
    <form id="f1" name="f1">
        <input id="inputid" name="id" value="ID">
    </form>

    <form id="f2" name="f2">
        <input name="key" value="KEY">
    </form>
</body>
</html>

jquery-mobile将尝试使用此form.id字符串,如果您的表单包含name = id输入,则会失败...

尝试了大多数浏览器,jquery verisons,结果相同。

修改:
对不起 - 只检查过jQuery,而不是jQuery-mobile的bug,这是在3月12日更正的。 不是在1.4.2中,当使用getAttribute('id')进行修补时,它可以工作......

https://github.com/jquery/jquery-mobile/commit/9ff610de479097c85ec7289e67fc656e5581d817

1 个答案:

答案 0 :(得分:4)

这实际上与jQuery无关。

问题在于,在DOM中,表单中的元素可以作为表单的属性访问,其name属性作为键。这是记录in the HTML5 spec(nb,它不是非常易于读者阅读)。在确定属性值时,此值将覆盖id属性的值。

引用name元素的其他属性的form属性也是如此,例如submitreset,甚至name。 (转到this jsFiddle并在单击链接后查看错误控制台以查看此问题的实际效果。)

给表单元素name属性作为form元素的属性名称是一个坏主意。请改为选择其他name