私はこのコードを作成しました:
function iterateChoices(row, element, choices, counter) {
if ($.isArray(choices) && choices.length > 0) {
element.each(function(index, item) {
if (counter === 0) {
row = '<div style="display:inline-block"><label style="display: inline-block">UPC:</label> <input style="display: inline-block" type="text" value="" name="pupc[]" /></div>';
row += '<div style="display:inline-block"><label style="display: inline-block">Precio:</label> <input style="display: inline-block" type="text" value="" name="pprice[]" /></div>';
row += '<div style="display:inline-block"><label style="display: inline-block">Cantidad:</label><input type="text" style="display: inline-block" value="" name="pqty[]" /></div>';
}
iterateChoices(row + '<div style="display:inline-block"><input style="display: inline-block" disabled="disabled" value="' + item.value + '"></div>', choices[0], choices.slice(1), counter + 1);
});
console.log("Counter: " + counter);
console.log("Row: " + row);
} else {
html_temp = "";
element.each(function(index, item) {
html_temp += row + '<div style="display:inline-block"><input style="display: inline-block" value="' + item.value + '" disabled="disabled"></div><br>';
});
html += html_temp;
}
console.log("html_temp: " + html_temp);
}
element
値として何があるかをテストします。
$.isArray(element)
false
element.length
2
element
[
<input type="text" name="input_color[]" class="field_color" data-id="color_5" placeholder="Color">
,
<input type="text" name="input_color[]" class="field_color" data-id="color_5" placeholder="Color">
]
$.each(element, function(index, item) { console.log(item) })
<input type="text" name="input_color[]" class="field_color" data-id="color_5" placeholder="Color">
<input type="text" name="input_color[]" class="field_color" data-id="color_5" placeholder="Color">
これは、それぞれの出力ですconsole.log()
:
html_temp:
Counter: 1
Row: <div style="display:inline-block"><label style="display: inline-block">UPC:</label> <input style="display: inline-block" type="text" value="" name="pupc[]" /></div><div style="display:inline-block"><label style="display: inline-block">Precio:</label> <input style="display: inline-block" type="text" value="" name="pprice[]" /></div><div style="display:inline-block"><label style="display: inline-block">Cantidad:</label><input type="text" style="display: inline-block" value="" name="pqty[]" /></div><div style="display:inline-block"><input style="display: inline-block" disabled="disabled" value="Red"></div>
html_temp:
html_temp:
Counter: 1
Row: <div style="display:inline-block"><label style="display: inline-block">UPC:</label> <input style="display: inline-block" type="text" value="" name="pupc[]" /></div><div style="display:inline-block"><label style="display: inline-block">Precio:</label> <input style="display: inline-block" type="text" value="" name="pprice[]" /></div><div style="display:inline-block"><label style="display: inline-block">Cantidad:</label><input type="text" style="display: inline-block" value="" name="pqty[]" /></div><div style="display:inline-block"><input style="display: inline-block" disabled="disabled" value="Blue"></div>
html_temp:
Counter: 0
Row: <div style="display:inline-block"><label style="display: inline-block">UPC:</label> <input style="display: inline-block" type="text" value="" name="pupc[]" /></div><div style="display:inline-block"><label style="display: inline-block">Precio:</label> <input style="display: inline-block" type="text" value="" name="pprice[]" /></div><div style="display:inline-block"><label style="display: inline-block">Cantidad:</label><input type="text" style="display: inline-block" value="" name="pqty[]" /></div>
html_temp:
なんらかの理由で、実際のコードでは決して$.each(element, ...)
うまくいかず、エラーがどこにあるかを見つけることができません。何か助けやアドバイスはありますか?
更新この Fiddleをテスト目的で 作成しました。その仕組みは次のとおりです。
- チェックボックスのいずれかをマークします
- オプションのセットごとに必要な数の入力を追加します (色、タッラ)
- 「バリエーションを作成」ボタンをクリック
振る舞い: あなたが最新のチェックボックスをチェックした場合、物事は私が望むように機能します。
更新 2:
console.log()
関数が呼び出されて結果が表示されたときに、いくつかのステートメントを追加しました。
function iterateChoices(row, element, choices, counter) {
console.log("element: " + element);
console.log("choices: " + choices);
console.log("counter: " + counter);
...
element:
[input.field_color, input.field_color, prevObject: x.fn.x.init[1], context: document, selector: "#color_choice_5 input:text", jquery: "1.10.2", constructor: function…]
choices:
[x.fn.x.init[1], x.fn.x.init[0]]
counter: 0
element:
[input.field_talla, prevObject: x.fn.x.init[1], context: document, selector: "#talla_choice_6 input:text", jquery: "1.10.2", constructor: function…]
choices:
[x.fn.x.init[0]]
counter: 1
element:
[prevObject: x.fn.x.init[1], context: document, selector: "#talla_choice_13 input:text", jquery: "1.10.2", constructor: function…]
choices: []
counter: 2
0
element:
[input.field_talla, prevObject: x.fn.x.init[1], context: document, selector: "#talla_choice_6 input:text", jquery: "1.10.2", constructor: function…]
choices:
[x.fn.x.init[0]]
counter: 1
element:
[prevObject: x.fn.x.init[1], context: document, selector: "#talla_choice_13 input:text", jquery: "1.10.2", constructor: function…]
choices: []
counter: 2
0
どこが悪いのか本当に分からない