списки в динамических таблицах
Ранее у меня были вопросы по 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, время: 23:27. |