我有以下ajax:

$.ajax({
    type: 'POST',
    url: myBaseUrl + 'Products/ajax_get_subcategories',
    dataType: 'json',
    data: {
        id: id
    },
    success: function (data) {
        var length = data.length;
        var div_subcategory = $('#subcategory');
        div_subcategory.html('');
        div_subcategory.append(
            "<select id='subcategory' name='data[Product][subcategory_id]'>"
        );
        for (var i = 0; i < length; i++) {
            var id = data[i]['Subcategory']['id'];
            var name = data[i]['Subcategory']['name'];
            $('#subcategory').append(
                "<option value=''+id>" + name + "</option>"
            );
        }
        div_subcategory.append("</select>");
    }
});


现在,您可以看到它将select附加到div块中。

但!有一个问题是调用了ajax之后的HTML输出:

    div id="subcategory" class="subcategory">
<select id="subcategory" name="data[Product][subcategory_id]"></select>
<option +id="" value="">Telte</option>
<option +id="" value="">Toilet</option>
<option +id="" value="">Service</option>
<option +id="" value="">Borde</option>
<option +id="" value="">Stole</option>
<option +id="" value="">Lyd og lys</option>
</div>


如您所见,它会在添加选项之前关闭select标记。

谁能告诉我为什么会这样吗?

最佳答案

当你写:

div_subcategory.append("<select id='subcategory' name='data[Product][subcategory_id]'>");


jQuery将插入

<select id='subcategory' name='data[Product][subcategory_id]'></select>


并且因为div_subcategory将具有与您要匹配div的选择相同的ID。

相反,我将通过在字符串中创建html并一次注入所有内容来编写此代码。

    var html += "<select id='subcategorysel' name='data[Product][subcategory_id]'>";
    for (var i = 0; i < length; i++) {
        var id = data[i]['Subcategory']['id'];
        var name = data[i]['Subcategory']['name'];
        html += "<option value=''+id>" + name + "</option>";
    }
    html += "</select>";
    div_subcategory.append(html);


此代码段更新您的代码以使用不同的ID,并一次性添加所有html内容,这应该会更快。

07-28 01:29
查看更多