HTML代码:
<div class="table-responsive">
<table id="dataTable" class="table table-hover table-separated">
<tbody>
<tr id="test-1">
<td class="test">
<form action="{{ url('/psy/update-test-status/'.$test->id) }}" method="POST" class="m-0">
<select name="status" class="form-control status_select">
<option class="text-success" value="active" selected>En ligne</option>
<option class="text-warning" value="inactive" >Inactif</option>
<option class="text-danger" value="canceled" >Annulé</option>
</select>
</form>
</td>
</tr>
<tr id="test-2">
<td class="test">
<form action="{{ url('/psy/update-test-status/'.$test->id) }}" method="POST" class="m-0">
<select name="status" class="form-control status_select">
<option class="text-success" value="active" selected>En ligne</option>
<option class="text-warning" value="inactive" >Inactif</option>
<option class="text-danger" value="canceled" >Annulé</option>
</select>
</form>
</td>
</tr>
<tr id="test-3">
<td class="test">
<form action="{{ url('/psy/update-test-status/'.$test->id) }}" method="POST" class="m-0">
<select name="status" class="form-control status_select">
<option class="text-success" value="active" selected>En ligne</option>
<option class="text-warning" value="inactive" >Inactif</option>
<option class="text-danger" value="canceled" >Annulé</option>
</select>
</form>
</td>
</tr>
</tbody>
</table>
</div>
JavaScript代码:
$(document).ready(function () {
function statusSelect(element) {
if ($(element).val() == 'active') {
$(element).removeClass('text-warning');
$(element).removeClass('text-danger');
$(element).addClass('text-success');
}
else if ($(element).val() == 'inactive') {
$(element).removeClass('text-success');
$(element).removeClass('text-danger');
$(element).addClass('text-warning');
}
else if ($(element).val() == 'canceled') {
$(element).removeClass('text-success');
$(element).removeClass('text-warning');
$(element).addClass('text-danger');
}
}
function updateTestStatus(element) {
form = $(element).parent('form');
tr = form.closest('tr');
dest_url = form.attr('action');
$.ajax({
type:"POST",
url:dest_url,
data:form.serialize(),
dataType: 'json',
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
success: function(data){
if($.isEmptyObject(data.errors)){
$('#dataTable').load(document.URL + ' #dataTable');
statusSelect($(element));
}
else {
}
},
errors: function (data) {
}
});
}
$('select.status_select').each(function (elem) {
statusSelect($(this));
});
$('select.status_select').on('change', function (e) {
statusSelect($(this));
updateTestStatus($(this));
});
});
-
我不知道如何排序和/或叠瓦函数
each
on change
-
tr
ajax成功回调中的元素:加载完整的
table
$('#dataTable tr#test-1').load(document.URL + ' #dataTable tr#test-1');
tr公司
tr公司
而不是替换它。
-
statusSelect
方法(更改选定输入文本的颜色)第一次工作,但在Ajax加载之后不再工作
-
这个
updateTestStatus
方法(Ajax调用然后重新加载页面的一部分)第一次工作,但之后不再工作。
编辑:第三和第四个问题现在已经解决(成功回调中的函数是在加载函数完成之前执行的)
更新代码:
function statusSelect(element) {
if ($(element).val() == 'active') {
$(element).removeClass('text-warning');
$(element).removeClass('text-danger');
$(element).addClass('text-success');
}
else if ($(element).val() == 'inactive') {
$(element).removeClass('text-success');
$(element).removeClass('text-danger');
$(element).addClass('text-warning');
}
else if ($(element).val() == 'canceled') {
$(element).removeClass('text-success');
$(element).removeClass('text-warning');
$(element).addClass('text-danger');
}
}
function updateTestStatus(element) {
form = $(element).parent('form');
tr = form.closest('tr');
dest_url = form.attr('action');
$.ajax({
type:"POST",
url:dest_url,
data:form.serialize(),
dataType: 'json',
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
success: function(data){
if($.isEmptyObject(data.errors)){
var row_id = tr.attr('id');
$('#dataTable #'+row_id).load(document.URL + ' #dataTable #'+row_id, function() {
testStatus();
});
}
else {
}
},
errors: function (data) {
}
});
}
function testStatus () {
$('select.status_select').each(function (elem) {
statusSelect($(this));
});
$('select.status_select').on('change', function (e) {
statusSelect($(this));
updateTestStatus($(this));
});
}
testStatus();
});
我还有一个问题:我只想加载
<tr>
不是所有的
<table>
...
$('#dataTable tr#test-1').load(document.URL + ' #dataTable tr#test-1');
给了我:
<table><tr id="test-1"><tr id="test-1">...</tr></tr></table>
似乎load方法“附加在内部”,并不像我所相信的那样“替换”。这句话起了作用:
$('#dataTable #'+row_id).load(document.URL + ' #dataTable #'+row_id, function() {
$(this).children(':first').unwrap();
testStatus();
});
How can I use jQuery.load to replace a div including the div
最终编辑
我是这样解决的:
success: function(data){
if($.isEmptyObject(data.errors)){
var row_id = tr.attr('id');
$('#dataTable #'+row_id).load(document.URL + ' #dataTable #'+row_id, function() {
$(this).children(':first').unwrap();
$('#'+row_id+' select.status_select').on('change', function (e) {
statusSelect($(this));
updateTestStatus($(this));
});
$('select.status_select').each(function (elem) {
statusSelect($(this));
});
});
}
}