Изменение атрибута имени с помощью jQuery

У меня есть функция jQuery, которая пытается измениться id, name и class значения атрибута элемента.

id и class изменение, кажется, работает, но по некоторой любопытной причине, пытаясь измениться name из элемента никогда не работает.

Вот мой код:

$(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) {

                $("#" + id).attr('classname', 'selected');
                $("#" + id).attr('id', 'sel' + rowIndex);
                $("#" + id).attr('name', 'sel' + rowIndex); // this never works

                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);

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

        });

    }
});
}); 
32
задан informatik01 1 November 2019 в 19:08
поделиться

2 ответа

Имя не может быть изменено, потому что после изменения id селектор в последующем выражении ( который использует немодифицированный id) ничего не выбирает :)

$("#" + id).attr('id', 'sel' + rowIndex);
$("#" + id).attr('name', 'sel' + rowIndex); // this can't ever work

Попробуйте объединить их в цепочку следующим образом, чтобы сохранить ссылку на текущий выбор:

$("#" + id).attr('id', 'sel' + rowIndex)
           .attr('name', 'sel' + rowIndex);

В качестве альтернативы, измените порядок операторов таким образом, чтобы вы изменили имя (и / или что-то еще) до изменение идентификатора:

$("#" + id).attr('name', 'sel' + rowIndex);
$("#" + id).attr('id', 'sel' + rowIndex);

Вы также можете назначить выбор переменной:

var $el = $("#" + id);
$el.attr("id", 'sel' + rowIndex);
...
55
ответ дан 27 November 2019 в 20:34
поделиться

Карим прав,

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

можно изменить на

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

, чтобы сначала изменить имя, $ ("#" + id) совпадает с getElementById, и как только вы измените идентификатор, это уже не тот элемент, который вы имели в виду. для ссылки на

3
ответ дан 27 November 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: