2

これはかなり厄介な質問ですが、ご容赦ください。が付いたフォームフィールドがある場合name="something"、フォームのjavascript DOM表現にはsomething、フィールドのDOM表現への参照であるプロパティが含まれることはjavascriptDOMのよく知られた機能です。

これで、フィールドの名前( "something")がフォームのネイティブプロパティの1つと等しい場合、そのフィールドは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

このような状況でネイティブプロパティにアクセスする方法はありますか?

ありがとう。

編集: 2つのポイントを明確にするためだけに:

  • 機能だけでなく、あらゆる物件にアクセスできるようにしたい
  • 私はこれを一般的な質問として意味します。論理的な解決策は、そもそも名前の衝突を引き起こさないことです。
4

3 に答える 3

1

「送信」という名前の入力がある場合、ネイティブ関数にアクセスする方法はないと思います。John Resig と Bear Bibeault によるSecrets of the Javascript Ninja の第 11 章で、同じトピックに出くわしました。JS と DOM の詳細を知っている人がいれば、それは彼らだと思います。

于 2013-02-15T17:11:32.190 に答える
1

次のようにしてください。

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

ネイティブ メソッドを使用し、ページ上の要素のコンテキストで呼び出します。

于 2013-02-15T17:25:15.190 に答える
0

これを Ivo の回答の編集として投稿しようとしましたが、拒否されました。メッセージは不可解ですが、オリジナルに追加しすぎたということであれば、それは間違っていると思います。理由が違う場合は、お気軽にコメントしてください。この編集があれば Ivo の回答を受け入れることができたでしょうが、それがなければ不完全だと思います。

Ivo の回答はネイティブ関数には有効ですが、属性には適用できません。属性の場合、値を取得する方法はいくつかありますが、どれも似ていますが、完璧なものはありません。ここで入手できるのはこれだけですが、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では、属性の代わりに名前付き入力を返すように見えるので、かなり役に立たないようです。

私の最初の質問に答えると、ほとんどの場合、プロパティにアクセスする方法があるように見えますが、プロパティと最終的にはブラウザに依存します。

于 2013-02-18T18:57:58.287 に答える