jQuery疑似命名约定问题

时间:2010-04-29 11:34:07

标签: jquery

我遇到了这个jQuery函数的问题,重命名下拉列表的id,类和名称的函数部分只适用于第一个下拉列表,后续版本不起作用,有什么想法吗?

我怀疑它可能与cat.parent_id中的命名约定有关,但它是asp.net mvc模型绑定所必需的。

$(document).ready(function () {

    $("table select").live("change", function () {

        var id = $(this).attr('id');

        if ($(this).attr('classname') != "selected") {

            var rowIndex = $(this).closest('tr').prevAll().length;
            $.getJSON("/Category/GetSubCategories/" + $(this).val(), function (data) {
                if (data.length > 0) {

                    //problematic portion
                    $("#" + id).attr('classname', 'selected');
                    $("#" + id).attr('name', 'sel' + rowIndex);
                    $("#" + id).attr('id', 'sel' + rowIndex);

                    var position = ($('table').get(0));

                    var tr = position.insertRow(rowIndex + 1);
                    var td1 = tr.insertCell(-1);
                    var td2 = tr.insertCell(-1);
                    td1.appendChild(document.createTextNode('SubCategory'));
                    var sel = document.createElement("select");
                    sel.name = 'parent_id';

                    sel.id = 'parent_id';

                    sel.setAttribute('class', 'unselected');
                    td2.appendChild(sel);
                    $('#parent_id').append($("<option></option>").attr("value", "-1").text("-please select item-"));

                    $.each(data, function (GetSubCatergories, Category) {
                        $('#parent_id').append($("<option></option>").
                                attr("value", Category.category_id).
                                text(Category.name));
                     });

                   sel.name = 'cat.parent_id';

                   sel.id = 'cat.parent_id';
                }

            });

        }
    });
}); 

1 个答案:

答案 0 :(得分:1)

您正在尝试设置您通过ID选择的内容的ID,这对于一个开始来说不是一件好事。

$("#" + id).attr('id', 'sel' + rowIndex); // Shouldn't do that I think

我想你要替换这一行

var id = $(this).attr('id');

var currentDropdown = this;

然后当你想在getJSON里面访问它时:

$(currentDropdown)

所以你的问题部分现在看起来像:

$(currentDropdown).attr('classname', 'selected');
$(currentDropdown).attr('name', 'sel' + rowIndex);
$(currentDropdown).attr('id', 'sel' + rowIndex);