这是一个非常棘手的问题,但请耐心等待。
这是javascript DOM的一个众所周知的功能,如果你有一个带有name="something"
的表单字段,那么表单的javascript DOM表示将具有something
属性,该属性是对该字段的DOM表示的引用。
现在,如果字段的名称(“something”)等于表单的一个本机属性,它将取代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
在这样的情况下,有没有办法访问本机属性?
感谢。
编辑:澄清两点:
答案 0 :(得分:1)
如果您有一个名为“submit”的输入,我认为没有办法访问本机函数。我只是在John Resig和Bear Bibeault的Secrets of the Javascript Ninja第11章中遇到了同样的主题。我想如果有人知道JS和DOM的来龙去脉,就是他们。
答案 1 :(得分:1)
以下应该可以解决问题:
HTMLFormElement.prototype.submit.call(document.getElementById("Form"))
它将使用本机方法并在页面上的元素的上下文中调用它。
答案 2 :(得分:0)
我试图发布这个作为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中,它似乎没用。回答我的原始问题,看起来在大多数情况下会有办法访问属性,但这取决于属性,最终取决于浏览器。