Атрибут имени атрибута JQuery
У меня есть функция JQuery, которая пытается изменить идентификатор, имя и класс элемента. Изменение идентификатора и класса похоже работает, но по какой-то любопытной причине попытка изменить имя элемента никогда не работает.
$(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));
});
}
});
}
});
});
Ответы
Ответ 1
Невозможно изменить name
, так как после изменения 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);
...
Ответ 2
Карим прав,
$("#" + 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
Вместо цепочки вы можете перейти в .attr()
{
"id" : "sel" + rowIndex ,
"name" : "sel" + rowIndex
}
Многие функции jQuery принимают такие объекты, как указано выше, когда вам нужно передать данные строки строки .css()
и .animate()