0

このHTMLコード内の各DIVのIDを取得しようとしています

<section id="choices">    
    <div id="talla_choice_24" style="">
        ...
    </div>
    <div id="color_choice_25" style="">
        ...
    </div>
    <div id="sport_choice_26" style="">
        ...
    </div>

    <button type="button" class="create-variation" id="create-variation" style="">Crear variaciones</button>
    <section id="variations_holder" style="display: none"></section>
</section>

だから私はこれを作った:

function getDivId(div) {
    var inputValues = [];
    $("#" + div + ' > div').each(function() {
        inputValues.push($(this).val());
    })
    return inputValues;
}

そして、私はここに電話します:

$('#choices').on("click", "#create-variation", function(e) {
    var parent_id = $(this).closest("section").attr("id");
    var element = getDivId(parent_id);

    iterateChoices("", element[0], element.slice(1), 0);
});

私はこのようなものを構築する必要があります:

var element = new Array($('#talla_choice_24 input:text'), $('#color_choice_25 input:text'), $('#sport_choice_26 input:text'));

しかし、私はこのエラーが発生します:

キャッチされていない TypeError: オブジェクトにメソッド 'each' がありません

なにが問題ですか?

アップデート

これは関数のコードですiterateChoices():

function iterateChoices(row, element, choices, counter) {
    if ($.isArray(choices) && choices.length > 0) {
        element.each(function(index, item) {
            if (counter == 0)
                row = '<input type="text" required="required" value="" name="pupc[]" /><input type="text" required="required" value="" name="pprice[]" /><input type="text" required="required" value="" name="pqty[]" />';

            iterateChoices(row + '<input value="' + item.value + '">', choices[0], choices.slice(1), counter + 1);
        });
    } else {
        html_temp = "";
        $.each(element, function(index, item) {
            html_temp += row + '<input value="' + item.value + '"><br>';
        });
        html += html_temp;
    }
}

また、このコードにいくつかの変更を加えました。

function getDivId(div) {
    var inputValues = [];
    $("#" + div + ' > div').each(function() {
        inputValues.push("#" + $(this).attr('id') + ' input:text');
    });

    return inputValues;
}

そして今、エラーはこれに変わります:

キャッチされていない TypeError: オブジェクト #talla_choice_24 入力: テキストにはメソッド 'each' がありません

更新 2

私はまだgetDivId()関数を変更して、次のような配列を構築し続けています:

 var element = new Array($('#talla_choice_24 input:text'), $('#color_choice_25 input:text'), $('#number_choice_23 input:text'), $('#sport_choice_23 input:text'));

ただし、配列値は文字列として構築されるため、取得できません。以下を参照してください。

function getDivId(div) {
    var inputValues = [];
    $("#" + div + ' > div').each(function() {

        inputValues.push('$("#' + $(this).attr('id') + ' input:text")');
    });

    return inputValues;
}

私は得ています:

("$('#talla_choice_24 input:text')", "$('#color_choice_25 input:text')")

そこに問題があると思います

4

3 に答える 3

1

空の文字列を返すだけの要素でvalメソッドを使用しています。文字列にはメソッドdivはありません。each


内部の入力要素を取得するために、各 div の id は必要ありません。これにより、単一の jQuery オブジェクトで入力が取得されます。

var element = $(this).closest("section").find("> div input:text");

個別の jQuery オブジェクトの配列が本当に必要な場合は、次のようにします。

element = element.map(function(){ return $(this); }).get();
于 2013-09-13T15:52:14.453 に答える