2009-04-24 7 views
2

OS X Safari(バージョン3とWebKit)のネイティブコードに詳しい方はいますか?私はフォーム内のいくつかの情報を解析するためにJavascriptを使用しています。私の入力の1つは「タグ」と呼ばれています。その要素の値を取得しようとするとき:Safariネイティブコード

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

Safariは何らかの機能を返します。私は "関数タグ({{ネイティブコード}}"とノードツリーのような値を警告するようにしましたが、どうして私がトラブルを起こすのか理解できません。誰かが手がかりを持っているなら、私に知らせてください。私は入力の名前を何か他のものに変更し、すべての要素を反復し、if()ステートメントを使用して、それが私が望む要素かどうかを判断することによって動作させましたが、なぜAppleが"tags"という名前のフォーム要素の使用を制限する...

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

答えて

6

[native code]というのは、それがJavaScriptで書かれているのではなく、ブラウザに組み込まれた関数だということを意味します。 tagsappears to be DOMのWebKit拡張で、タグ名でフォームの要素のリストを取得できます。

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

問題は、JavaScriptでのコレクションへのインデックスも(方法を含む)任意のオブジェクトのプロパティにアクセスするということですので、あなたに:私はStackOverflowのページでこれを実行した場合たとえば、私は答えのテキスト領域を取得します名前付き要素tagsにアクセスしようとすると、代わりにWebKitが定義するelementsオブジェクトのメソッドを取得します。幸いにも、回避策があります。

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

編集:あなたはidまたはnameでアイテムを取得するために、要素のリストにnamedItemを呼び出すことができ、その方がよいでしょうが、場合にあなたが取得する必要があり、さらには他のブラウザでは、一般的にnamedItemを使用することに注意してください要素itemまたはlengthまたはそのようなもの。そうでない場合は、[]演算子でインデックスとして使用すると、要素の代わりにitemまたはlengthの組み込みメソッドが得られます。

+0

感謝のように働いた、ありがとう! – bloudermilk

+0

興味深いことに、私はSafariでこの問題を経験したことはありませんでしたが、私はIE9でこれを実行しました。幸いにも同じソリューションがそこで働いていました。 – arlomedia

+0

おっと、私はこれで落とし穴を見つけました。複数の要素(チェックボックスやラジオボタンのセット)を持つフォーム要素にアクセスしようとすると、namedItemはSafariの要素の配列を返しますが、IE9とFirefox 4の最初の要素(チェックした唯一のバージョンこれまでのところ)。したがって、チェックボックスやラジオボタンを使って作業している場合、これは要素の配列を返す要素[]のドロップイン置換ではありません。 – arlomedia

関連する問題