списки в динамических таблицах
Ранее у меня были вопросы по ajax https://javascript.ru/forum/ajax/715...taet-post.html
Так как этот вопрос решился, возникли новые. У меня в динамической таблице есть 2 списка. При клике в таблицу добавляются новые поля , как и эти два списка. Если в первом поле таблицы у элементов id = "test1" То в следующем поле id = "test2" Далее id = "test3", и так далее. Изменяется только ИД, класс тот же. Когда добавил ajax запрос, всё работает нормально, но вот когда добавляю новые поля в таблицу, то у списков там "стандартное значение" И когда я выбираю нужное значение в новосозданном списке, то значения меняются и в других, связанных с этим списками. Что нужно? Что бы у новосозданных списках значение было такое же, как у предыдущего списка (если у списка с id = "spisok1", то у списка с id = "spisok2"было такое же значение) Это я попытался сделать так (через общий класс) $(function () { var select = $('select.fertig'); select.on('change', function () { select.not(this).val(this.value); }); }) Но оно, почему то, не работает. И было бы хорошо, если б у этих списков был б только этот выбранный вариант, а других бы не было видно, но я не знаю, как это реализовать:-? Всё, что нужно, что бы у всех списков определенного класса значение было такое же, как у первого списка этого же класса |
maksqwerty,
$(function () { var table = $('table'); table.on('change', 'select.fertig', function () { $('select.fertig').not(this).val(this.value); }); }) |
Работает, и это уже хорошо, но работает не совсем так, как нужно
оно меняет значение, только когда я уже добавил новые поля, а нужно, что бы как только я добавил поле, а значение списка уже было изменено на нужное (тут наверное нужно присвоить event пока не существующим элементам, но как это сделать, я не знаю) А ещё, вопрос: почему нужно прописывать table, разве без этого скрипт не видит нужных элементов? |
maksqwerty,
скрипты не телепаты, они не знают что вы захотите добавить, но есть делегирование родитель следит за изменениями внутри себя. строка 3 это "делегирование" в jquery. Цитата:
$('select.fertig:first').trigger('change') |
у меня значения селекта приходят с бд
как бы это сказать, мне нужно, что бы скрипт смотрел, какое значение у первого элемента, и менял значение списков, которые будут создаваться, на нужное, и при этом удалял другие варианты. Спасибо за делегирование, буду вкуривать. Эта строка, что вы написали, это пример делегации? |
maksqwerty,
ответ написан ранее :) |
Окей, куда тогда мне втыкнуть строчку с делегацией в выше написаный вами скрипт, шобыработало?:)
|
Цитата:
|
Ну как сделать этот скрипт с делегированием,
Цитата:
Цитата:
Цитата:
|
maksqwerty,
где код создания нового селекта? |
function deleteRow(el) { var del = el.parentNode.parentNode.rowIndex; table.deleteRow(del); while (table.rows[0]){ updateRow(table.rows[del], del, false); del++; } } function insRow() { var new_row = updateRow(clone.cloneNode(true), ++tbody.rows.length, true); tbody.appendChild(new_row); } function updateRow(row, del) { row.cells[0].innerHTML = del; var inp1 = row.cells[1].getElementsByTagName('input')[0]; inp1.id = 'inp1ut'+ del; var inp2 = row.cells[2].getElementsByTagName('input')[0]; inp2.id = 'inp2ut'+ del; var sel1 = row.cells[3].getElementsByTagName('select')[0]; sel1.id ='fertig'+ del; var sel2 =row.cells[4].getElementsByTagName('select')[0]; sel2.id ='kost'+ del; var but1 = row.cells[5].getElementsByTagName('button')[0]; but1.id = 'deletebutton'+del; return row; } Вот |
maksqwerty,
в конец строки 15 $('select.fertig:first').trigger('change') |
А это разве ничего, что у меня таблица на обычном js написана, а тут jquery
inb4: всё-равно не работает:( |
maksqwerty,
может нет класса fertig? |
maksqwerty,
может ошибки в консоли есть ? |
Есть такой класс
в консоли ошибок нет. через дебаггер смотрю, тоже нормально всё скрипт будто игнорирует эту строку |
Может так?
$('select[id*="fertig"]:first').trigger('change'); Или так: $('select.fertig:first').change(function(){ alert('asd'); }).trigger('change'); |
ну оно же id перебирает.
а класс у меня таким и остался, каким я написал в html. этот список сейчас выглядит вот так: <select id="fertig1" name="fertig[]" class="fertig" onchange="моя функция ajax()" > <?php include('position/fertig.php'); ?> </select> |
maksqwerty,
строка 33 sel1.value = document.getElementById('fertig1').value; |
Цитата:
Цитата:
Но только вот есть ещё другая проблема. Элементы этих списков зависят от другого списка. Если я в том другом списку выберу, к примеру, tetst1, то в этом списке будут видны, к примеру 5 элементов, а если выберу, test2, то будут видны другие элементы. Я это делал через display:none -> display:block $(document).ready(function(){ $("#eart").change(function(){ var val = $("#eart").val(); if (val == "1"){ $(".000").css("display", "block"); $(".310").css("display", "none"); $(".311").css("display", "block"); $(".312").css("display", "block"); $(".313").css("display", "none"); $(".314").css("display", "block"); $(".318").css("display", "none"); $(".319").css("display", "block"); }else if (val == "2"){ $(".000").css("display", "none"); $(".310").css("display", "block"); $(".311").css("display", "block"); $(".312").css("display", "none"); $(".313").css("display", "block"); $(".314").css("display", "none"); $(".318").css("display", "block"); $(".319").css("display", "none"); } }); }); Эти классы, которые я скрываю/показываю - классы вариантов списка fertig <option id="" class="000">test</option> К примеру. С первым элементом всё нормально показывает. А у других, динамически созданных, элементов есть все варианты (т.е везде стоит блок) Что с этим можно сделать? |
maksqwerty,
не проще ли связать классами группы и опции? Тогда вместо .000 ... будет типа $('.a').css(...), где, а это группа. Ну или класс один с добавлением значения 1 и 2. |
Цитата:
Мне бы сперва решение задания найти, а потом ою оптимизации кода думать :( |
Цитата:
|
Но разве поможет это решению
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 03:17. |