2011-01-30 15 views
2

this.form.elementsが返すのと同じ型の配列を配列キーとして取得する必要があります。jQuery - 入力名をキーとして配列を取得する

私はthis.toArray()を試しましたが、同じように見えますが、名前キーがありません(キーは数字です)。シリアル化が可能な選択肢であることを利用して

(function($) { 
    $.fn.blah = function(){ 
    var that = this; 
    return this.each(function(){ 
     $(this).bind('change', function(){ 
      var matches1 = that.toArray(); // this doesn't work 
      var matches2 = this.form.elements; // this works. 

      console.log(matches1); // but both arrays look the same. wtf? 
      console.log(matches2); 

      return true; 
     }).change(); 

    }); 
}; 

})(jQuery); 

$("input").blah();

+0

これは 'this 'の値が何であるかによって異なります。 – Anurag

+0

それはセレクタのセットです、 '$(" input ")から来ますsomefunction()....' – Alex

答えて

3

JavaScriptでは、名前付きキーには配列を使用しません。代わりにObjectを使用します。私は値が要素そのものでなければならないと仮定します。

var result = {}; 

$.each(this.form.elements, function() { 
    result[ this.name ] = this; 
}); 

あなたのアップデートに関しては、この行:あなたはjQueryのtoArray() jQueryオブジェクトに対してを呼び出しているので

var matches1 = that.toArray(); 

...は動作しません。

これを使用する場合は、ライブラリから呼び出して、jQueryオブジェクトに渡します。

var matches1 = $.toArray(that); 

...あなたは、各changeイベントのアレイへのすべての<input>要素を表すjQueryオブジェクトをオンにしたいと思いますなぜ私にはわからないが。

この行:それは単にイベントを受信し<input>要素から形の要素への参照であるため

var matches2 = this.form.elements; // this works. 

は...働きます。ネイティブのDOM APIプロパティを使用してコレクション(これは技術的には配列ではありません)を取得します。


は、私が toArray()の使用について間違っていたので、私の答えを編集する必要がありました。私は makeArray()を考えていた。 toArray()メソッドは .get()のラッパーで、まったく同じことを行います。

+0

詳細な説明をありがとう:)私は "that" .elements "は" this.form "からですか? – Alex

+1

@Alexandra: 'that'変数は、元の' $( 'input') '選択の結果を含むjQueryオブジェクトへの参照です。したがって、ページにあるすべての入力を参照します。 'this.form.elements'を実行すると、' this'( 'change'イベントを受け取った要素)と同じ形式の要素だけを参照しています。 – user113716

+0

あなたの最後のコメントはこれをかなり包み込むと思います。 – karim79

1

form.elementsは、HTML5にHTMLCollectionまたはHTMLFormControlsCollectionのオブジェクトを返します。

これらのオブジェクトの要素は、インデックスまたは名前でアクセスできます。あなたは、「ログイン」という名前の単一の入力要素でフォームを持っているのであれば、あなたが行うことができます:

form.elements.[0] 

または

form.elements["login"] 

を同じ要素にアクセスします。このようなオブジェクトをシミュレートするには、対応するインデックスと名前を持つ各フォーム要素の2つのエントリを追加します。しかし、もしform.elementsがあなたのために働くなら、私はそれを直接使用することをお勧めします。

関連する問題