【问题标题】:Access native form properties that were overridden by field names?访问被字段名称覆盖的本机表单属性?
【发布时间】:2013-01-31 17:17:59
【问题描述】:

这是一个相当令人头疼的问题,但请多多包涵。 这是 javascript DOM 的一个众所周知的特性,如果您有一个带有 name="something" 的表单字段,那么该表单的 javascript DOM 表示将具有一个 something 属性,该属性是对该字段的 DOM 表示的引用。

现在,如果字段的名称(“某物”)等于表单的本机属性之一,它将在 javascript 对象中取而代之。例如,对于一个表单:

<form id="Form"><input name="submit" /></form>

我们将拥有:

var s=document.getElementById("Form").submit; // s is the input

而不是

var s=document.getElementById("Form").submit; // s is the native submit function

有没有办法在这种情况下访问本机属性?

谢谢。

编辑:澄清两点:

  • 我希望能够访问任何属性,而不仅仅是函数
  • 我的意思是这是一个一般性问题。一个合乎逻辑的解决方案是首先不要引发名称冲突。

【问题讨论】:

  • 你能用 onsubmit 代替吗?可能是解决问题的方法...
  • @Giles 谢谢,但请看我的编辑。

标签: javascript forms dom


【解决方案1】:

我试图将其发布为对 Ivo 答案的编辑,但被拒绝了。信息很神秘,但如果他们的意思是我在原件上添加了太多内容,那么我认为这是错误的,因为我只是想完成它。如果原因不同,请随时发表评论。有了这个编辑,我会接受 Ivo 的回答,但如果没有它,我认为它是不完整的。

Ivo 的答案适用于本机函数,但不适用于属性。对于属性,似乎有多种方法可以检索值,它们都很相似,但都不是完美的。我已经在 IE9 上测试了以下内容,这是我在此处可用的全部内容,但 http://www.quirksmode.org/dom/w3c_core.html#attributes 表示行为通常(如果不完全一致)是一致的:

form.attributes['name']       // node representing the 'name' attribute

form.getAttribute('name')     // input with name="name"

form.attributes['submit']     // null

form.getAttribute('submit')   // input with name="submit"

form.attributes['onsubmit']   // node representing the 'onsubmit' attribute, 
                              // whose value is a string

form.getAttribute('onsubmit') // input with name="submit"

基于此,似乎(再次注意我没有彻底测试它):

  • 对于值属性,可以使用attributes['attribute name'] 方法,它应该适用于IE6。
  • 对于原型函数,可以使用prototype.fn.call 方法
  • 对于函数属性,也许可以检索属性的源代码并使用它,但我宁愿不必这样做。
  • 由于getAttribute 似乎返回的是命名输入而不是属性,至少在 IE 中,它似乎没什么用。

回答我最初的问题,看起来在大多数情况下都会有访问属性的方法,但这取决于属性,最终取决于浏览器。

【讨论】:

    【解决方案2】:

    以下应该可以解决问题:

    HTMLFormElement.prototype.submit.call(document.getElementById("Form"))
    

    它将使用本机方法并在页面上元素的上下文中调用它。

    【讨论】:

    • 谢谢。我很想接受这一点,但我希望看到两件事:1)提示访问原型的可移植方式,2)访问函数以外的属性的方式,我担心如果可能的话会更棘手完全没有。
    【解决方案3】:

    如果您有一个名为“提交”的输入,我认为没有办法访问本机函数。我刚刚在 John Resig 和 Bear Bibeault 的 Secrets of the Javascript Ninja 第 11 章中遇到了同样的话题。我想如果有人知道 JS 和 DOM 的来龙去脉,那就是他们。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2012-02-06
      • 2017-05-05
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多