У меня есть таблица в HTML, где идентификатор динамически генерируется из счетчика строк:
$(table).find('tbody').append("<tr>name=\"tableRow\"</tr>"
+ "<td>"
+ "<select id=\"shapeSelect_" + rowCount + "></td>"
+ "<option onclick=\"sphereSelect()\" value=\"sphere\">Sphere</option>"
+ "<option onclick=\"cylinderSelect()\" value=\"cylinder\">Cylinder</option>"
+ "</select>"
+ "</td>"
+ "<td><input type=\"text\" id=\"altitude" + rowCount + "\"</td>"
+ "<td><input type=\"text\" name=\"maxAlt\" id=\"maxAltitude_" + rowCount + "></td>"
+ "</tr>"
Мне нужно, чтобы maxAltitude отключалась для ввода при выборе сферы. Когда цилиндр выбран, он должен быть включен для ввода.
Каждый пример, который я нахожу, довольно прост, но требует точного знания идентификатора, где в моем коде он генерируется динамически. Это пример того, что я нахожу:
$(#maxAltitude).prop("disabled", true);
Как я могу сделать это, когда maxAltitude будет больше похожа на: maxAltitude_10? В таблице может быть 1-n рядов, и мне нужно специально отключить максимальную высоту в ряду, где был выбран раскрывающийся список.
Я пробовал jQuery и javascript, но не могу найти хороший способ сделать это:
<option onclick="shapeSelect()" value="sphere">Sphere</option>
<option onclick="shapeSelect()" value="cylinder">Cylinder</option>
function shapeSelect() {
var shapeSelects = document.getElementsByName("shapeSelect");
var maxAlts = document.getElementsByName("maxAlt");
for(var i = 0; i < shapeSelects.length; i++) {
switch(shapeSelects[i].value) {
case "sphere":
maxAlts[I].disabled = True;
break;
case "cylinder":
maxAlts[i].disabled = False;
}
}
}
С приведенным выше кодом я получаю: SyntaxError: неожиданный токен: идентификатор всякий раз, когда запускается shapeSelect ().
Я изменил код следующим образом:
<table class="myTable" id="myTable"></table>
$(table).find('tbody').append("<tr>name=\"tableRow\"</tr>"
+ "<td>"
+ "<select id=\"shapeSelect_" + rowCount + "></td>"
+ "<option value=\"sphere\">Sphere</option>"
+ "<option value=\"cylinder\">Cylinder</option>"
+ "</select>"
+ "</td>"
+ "<td><input type=\"text\" id=\"altitude_" + rowCount + "\"</td>"
+ "<td><input class=\"maxAltitudeInput\" type=\"text\" id=\"maxAltitude_" + rowCount + "\" disabled></td>"
+ "</tr>"
$('#myTable').on('change','.shapeSelector',function(){
var shouldDisableInput = $(this).val() === 'sphere';
$(this).closest('tr').find('.maxAltitudeInput').attr('disabled',shouldDisableInput);
}
И все же ничего не происходит при изменении выпадающего списка формы.
РЕДАКТИРОВАТЬ:
Извинения за несоответствия именования. Моя dev-машина подключена к сети с воздушным зазором, и я вручную глушил пост здесь, на переполнении стека. Переменная rowCount создавалась и увеличивалась в другой функции. Я пытался для краткости разместить только соответствующий код в сообщении.
I был пропустил класс из shapeSelector. Это было недостающее звено. Это работает сейчас!