У меня есть таблица php со значениями. Я хочу, чтобы данные двух таблиц были доступны для редактирования. У меня есть заголовки таблиц Task, Duedate, Staff, Department. Значения td извлекаются из базы данных с помощью laravel eloquent.
<table class = "table table-striped">
<thead>
<tr><th scope = "col">Task</th><th scope = "col">Duedate</th><th scope = "col">Staff</th><th scope = "col">Department</th></tr>
</thead>
@foreach($tasks as $task)
<input type = "text" id = "taskid" name = "taskid" value = "{{$task->id}}" hidden>
<tr class = "tabletd"><td scope = "col" >{{$task->task}}</td>
<td scope = "col" contenteditable = "true">
<input type = "date" name = "duedate" id = "duedate" class='form-control form-control-sm' value = "{{$task->duedate}}" style = "width:135px;" >
</td>
<td scope = "col">{{$task->user->name}}</td><td scope = "col">{{$task->department->title}}</td>
</tr></table> @endforeach
и я использую ajax для обновления значений на сервере.
$(document).ready(function(){
$(document).on('change','#duedate',function(){
var duedate=$(this).val();
var id = $('#taskid').val();
$.ajax({
type:'get',
url:'{!!URL::to('duedateupdate')!!}',
data:{'id':id, 'duedate':duedate},
success:function(data){
document.getElementById("updatemsg").hidden = false;
setTimeout( function (){
document.getElementById("updatemsg").hidden = true;
}, 2000);
},
error:function(){
}
});
});
Работает хорошо. Но обновляет только первую строку таблицы. Как мне обновить значения в других строках.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это происходит из-за того, что вы используете идентификатор входа «duedate».
Измените идентификатор на класс
<input type = "date" name = "duedate" class='form-control form-control-sm duedate' value = "{{$task->duedate}}" style = "width:135px;" >
а затем в прослушивателе событий используйте селектор класса:
$(document).on('change','.duedate',function(){
Это должно дать вам желаемый результат
--- отредактируйте после комментария ниже: -----
посмотрите на селектор здесь: var id = $('#taskid').val();
опять же, вы используете идентификатор (идентификатор всегда будет выбирать только один элемент), вместо этого используйте значение данных во входных данных, например:
<input type = "date" data-task-id = "{{$task->id}}" class = "duedate" class='form-control form-control-sm' value = "{{$task->duedate}}" style = "width:135px;" >
то вы можете использовать это в своем ajax:
var id = $(this).data( 'task-id' );
Я обнаружил, что иногда data () вызывает у меня проблемы, если это произойдет, используйте это:
var id = $(this).attr( 'data-task-id' );
Нет .. Тем не менее он обновляет duedate в первой строке таблицы.
У меня есть код, отредактировавший мой код, как показано ниже, и он хорошо работает
<input type = "date" name = "duedate" contenteditable = "true" data-id = "{{$task->id}}" data-column = "duedate" class = "form-control form-control-sm duedate" value = "{{$task->duedate}}" style = "width:135px;" >
$(document).on('change','.duedate',function(){
var duedate = $(this).val();
var id = $(this).data("id");
$.ajax({
type:'get',
url:'{!!URL::to('duedateupdate')!!}',
data:{'id':id,'duedate':duedate},
success:function(data){
},
error:function(){
}
});
});
избегайте использования повторяющихся идентификаторов в html-документе