2

OS X Safari(バージョン3およびWebKit)のネイティブコードに精通している人はいますか?私はJavascriptを使用してフォーム内のいくつかの情報を解析しており、入力の1つに「タグ」という名前が付けられています。以下を使用してその要素の値を取得しようとすると、

// button is being passed through a function as a DOM object
var tags = button.form.elements["tags"].value;

Safariはある種の関数を返します。「functiontags(){[ネイティブコード]}」やノードツリーなどのアラート値を取得しましたが、なぜ問題が発生するのか理解できません。手がかりがあれば教えてください。入力の名前を別の名前に変更し、すべての要素を繰り返し処理し、if()ステートメントを使用してそれが必要な要素であるかどうかを判断することで機能するようになりましたが、Appleがなぜそうするのか非常に興味があります「タグ」という名前のフォーム要素の使用を制限します。

PS-これはテストであり、Firefoxで正常に動作します。

4

1 に答える 1

6

[native code]これは、JavaScriptで記述されているのではなく、ブラウザに組み込まれている関数であることを意味します。DOMのWebKit拡張機能のようで、タグ名でフォーム内の要素のリストを取得できますtags たとえば、StackOverflowページでこれを実行すると、回答テキスト領域が表示されます。

document.getElementById('submit-button').form.elements.tags("textarea")[0]

問題は、JavaScriptのコレクションへのインデックスがオブジェクトのプロパティ(メソッドを含む)にもアクセスするため、名前付き要素にアクセスしようとするとtags、代わりにelementsWebKitが定義するオブジェクトのメソッドを取得することです。幸いなことに、回避策があります。namedItem要素リストを呼び出して、idまたはname:でアイテムを取得できます。

var tags = button.form.elements.namedItem("tags").value;

編集:またはそのようなnamedItem名前の要素を取得する必要がある場合に備えて、他のブラウザでも一般的に使用する方がおそらく良いことに注意してください。それ以外の場合、演算子でインデックスとして使用すると、要素の代わりに組み込みメソッドを取得します。itemlength[]itemlength

于 2009-04-25T00:21:27.960 に答える