フォームのすべての子要素をループする最良の方法は何だろうと思っていましたか?フォームに入力要素と選択要素の両方が含まれています。
今のところ:
success: function(data) {
$.each(data.details, function(datakey, datavalue) {
$('#new_user_form > input').each(function(key, value) {
if($(this).attr('id') == datakey) {
$(this).val(datavalue);
}
});
});
}
ただし、これはフォームの入力要素をループするだけで、選択要素も含めたいと思います。
私が試してみました:
$('#new_user_form > input, #new_user_form > select').each(function(key, value) {
しかし、これは機能しません。なぜこれが起こっているのか誰も知っていますか?ありがとう!
JQueryから :入力セレクターページ :
:inputはjQuery拡張機能であり、CSS仕様の一部ではないため、:inputを使用するクエリは、ネイティブDOM querySelectorAll()メソッドによって提供されるパフォーマンスの向上を利用できません。 :inputを使用して要素を選択するときに最高のパフォーマンスを実現するには、まず純粋なCSSセレクターを使用して要素を選択し、次に.filter( ":input")を使用します。
これが最良の選択です。
$('#new_user_form *').filter(':input').each(function(){
//your code here
});
純粋なJavaScriptはそれほど難しくありません。
for(var i=0; i < form.elements.length; i++){
var e = form.elements[i];
console.log(e.name+"="+e.value);
}
注:form.elementsはオブジェクトのfor-inループであるため、期待どおりに機能しません。
答えが見つかりました ここ(クリス・ピーチマンによる) 、文書化された ここ(W3S) .
$('#new_user_form').find('input').each(function(){
//your code here
});
#jquery Freenode IRCチャネル:
$.each($(form).serializeArray(), function(_, field) { /* use field.name, field.value */ });
チャンネルの@Corkに感謝します。
私は使用しています:
$($('form').prop('elements')).each(function(){
console.info(this)
});
見苦しいようですが、jQuery
を使用してすべての要素を取得するより良い方法です。
このようにするとどうなりますか:-
$('#new_user_form input, #new_user_form select').each(function(key, value) {
私は、このシンプルなjqueryスニペットを見つけました。これは、使用したいセレクターのタイプを選択するのに便利です。
$("select, input").each(function(){
// do some stuff with the element
});
$('#new_user_form :input')
があなたの進むべき道です。 >
セレクターの省略に注意してください。有効なHTMLフォームでは、入力タグをフォームタグの直接の子にすることはできません。
フォーム送信内で2つのjQueryシリアライザーのいずれかを実行して、送信された値を持つすべての入力を取得します。
var criteria = $(this).find('input,select').filter(function () {
return ((!!this.value) && (!!this.name));
}).serializeArray();
var formData = JSON.stringify(criteria);
serializeArray()は、名前と値の配列を生成します
0:{名前: "OwnLast"、値: "Bird"}
1:{名前: "OwnFirst"、値: "Bob"}
2:{名前: "OutBldg []"、値: "PDG"}
3:{名前: "OutBldg []"、値: "PDA"}
var criteria = $(this).find('input,select').filter(function () {
return ((!!this.value) && (!!this.name));
}).serialize();
serialize()は、標準のURLエンコード表記でテキスト文字列を作成します
「OwnLast = Bird&OwnFirst = Bob&OutBldg%5B%5D = PDG&OutBldg%5B%5D = PDA」