2016-05-07 5 views
0

私はちょうど良い数分をデバッグしましたwhy new FormData($("#ImageEditorForm"));は動作していません。 Stack Overflowに回した後、代わりにnew FormData($("#ImageEditorForm")[0]);を使用する別のスレッドの提案が見つかりました。新しいFormData()を使用するときに[0]を指定するのはなぜですか?

私は何か起こることを期待していない変更を加えました。代わりに、コードは完全に正常に動作します。以前は、何もサーバーに送信されていませんでした。これで、フォームデータとファイルが期待通りに表示されます。

私の質問は「[0]」が必要な理由です。そのIDを持つ要素はDOMに1つしかありません。 IDで選択すると必ず1つの要素しか返されませんか?ここで何が起こっているのですか?

答えて

4

$("#ImageEditorForm")は、jQuery objectを返し、FormDataにはDOMノードが必要です。

DOMノードを返すdocument.getElementById(id);を使用できます。

FormData(document.getElementById("ImageEditorForm")); 

またはCSSセレクタをとり、そうでなければ見出され、ヌル場合にノードを返すdocument.querySelector(selector);を使用します。

+0

ありがとうございました! – Ilmiont

2

jQueryで選択すると、返されるオブジェクトはjQueryオブジェクトであり、これが表す実際のDOMノードを取得するには、jQueryオブジェクトで[0]を使用します。

2つの結果を返すセレクタを使用した場合、実際のDOMノードに到達するためにオブジェクトにインデックスを付ける必要がある理由を理解することは簡単ですが、これは標準のjQueryです。

そして、andlrcと言ったように、実際のDOMノードをFormData関数に渡す必要があります。

+0

上記の説明を追加していただきありがとうございます!私はこれを認識していませんでした - jQueryで選択するとdocument.getElementById()と同じものが返されると仮定しました。 – Ilmiont

+1

@Ilmiontあなたのケースでは、jQueryを使用すると、 'document.getElementById'が返す同じDOMノードへの参照を含むjQueryオブジェクトが返されます。 – andlrc

関連する問題