jQuery表格的行編輯
單擊單元格,單元格顯示為一個控件
然后,在控件中輸入或者選擇值,失去焦點之后
獲取該控件的值,顯示在單元格中
控件可以是input、select、datetime等
Input
Select2
Datetime
$(
"#assayItemData_tbody").on(
"click",
"td",
function () {var td = $(
this);
var url = $(
"form").attr(
"action");
var text = td.text();
var a = td.find(
'a');
var innerDatetime = a.text();
var param = td.find(
"a").attr(
"data-pk");
var str =
JSON.stringify(param);
if (str !=
undefined) {
var index = str.indexOf(
",");
var header = str.substring(
1, index);
if (header ==
"assayItemData") {
var assayItemID = td.find(
"a").attr(
"data-assayItemID");
var comboDatas = comboDatasMap.get(assayItemID);
if (comboDatas) {
var txt = $(
"<select name='cell' type='text' class='form-control' style='margin: 0px;" +
"border-style: none;padding: 0px;height: 100%;width: 100%'></select>");
var options =
'<option ></option>';$.each(comboDatas,
function (j, comboData) {for (
var key
in comboData) {options +=
'<option value="' + comboData[key] +
'">' + comboData[key] +
'</option>';}});txt.append(options);txt.change(
function () {var newText = $(
this).select2(
'data').text;
var newVal = $(
this).val();
var value = param +
"," + newVal;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: value},dataType:
'JSON',success:
function (res) {var message = res.message;td.find(
'div').remove();a.text(newText);td.append(a);},error:
function () {}});});td.text(
"");td.append(txt);txt.focus();txt.select2({width:
100 +
"%", placeholder:
"請選擇", allowClear:
true});}
else {
var txt = $(
"<input name='cell' type='text' class='form-control' style='margin: 0px;" +
"border-style: none;padding: 0px;height: 100%;width: 100%'>").val(text);txt.blur(
function () {var newText = $(
this).val();
var value = param +
"," + newText;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: value},dataType:
'JSON',success:
function (res) {if (!res.success) {$.app.alert({title:
"警告",message: res.message});}
if (res.judgmentResult) {
var tr = $(td).closest(
"tr");tr.find(
"td[columnname='judgmentResult']").find(
'a').text(res.judgmentResult);}td.find(
'input').remove();a.text(newText);td.append(a);},error:
function () {}});});td.text(
"");td.append(txt);td.find(
'input').focus();}}
else if (header ==
"assayEquipmentNo" || header ==
"judgmentResult") {
var txt = $(
"<input name='cell' type='text' class='form-control' style='margin: 0px;" +
"border-style: none;padding: 0px;height: 100%;width: 100%'>").val(text);txt.blur(
function () {var newText = $(
this).val();
var value = param +
"," + newText;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: value},dataType:
'JSON',success:
function (res) {if (!res.success) {$.app.alert({title:
"警告",message: res.message});}
if (res.judgmentResult) {
var tr = $(td).closest(
"tr");tr.find(
"td[columnname='judgmentResult']").find(
'a').text(res.judgmentResult);}td.find(
'input').remove();a.text(newText);td.append(a);},error:
function () {}});});td.text(
"");td.append(txt);td.find(
'input').focus();}
else if (header ==
"assayMethodId") {
var txt = $(
"<select name='cell' type='text' class='form-control' style='margin: 0px;" +
"border-style: none;padding: 0px;height: 100%;width: 100%'></select>");
var assayItemID = td.find(
"a").attr(
"data-assayItemID");
var assayMethads = assayMethadArry.get(assayItemID);
var options =
'<option ></option>';$.each(assayMethads,
function (j, assayMethad) {options +=
'<option value="' + assayMethad.id +
'">' + assayMethad.assayMethodName +
'</option>';});txt.append(options);txt.change(
function () {var newText = $(
this).select2(
'data').text;
var newVal = $(
this).val();
var value = param +
"," + newVal;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: value},dataType:
'JSON',success:
function (res) {clickCodeTableTr.click();},error:
function () {}});});td.text(
"");td.append(txt);txt.focus();txt.select2({width:
100 +
"%", placeholder:
"請選擇", allowClear:
true});}
else if (header ==
"assayDataCollator") {
var txt = $(
"<select name='cell' type='text' class='form-control' style='margin: 0px;" +
"border-style: none;padding: 0px;height: 100%;width: 100%'></select>");txt.append(assayDataCollatorOptions);txt.change(
function () {var newText = $(
this).select2(
'data').text;
var newVal = $(
this).val();
var value = param +
"," + newVal;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: value},dataType:
'JSON',success:
function (res) {var message = res.message;td.find(
'div').remove();a.text(newText);td.append(a);},error:
function () {}});});td.text(
"");td.append(txt);txt.focus();txt.select2({width:
100 +
"%", placeholder:
"請選擇", allowClear:
true});}
else if (header ==
"finishAssayTime") {
var frontdiv = $(
'#test5').parent(
'div').attr(
"id");
if (frontdiv !=
"saveInput") {
var fronttd = $(
'#test5').parent(
'td');fronttd.find(
'a').css(
"display",
"");}td.find(
'a').css(
"display",
"none");td.append($(
'#test5'));}}
});
layDate控件的使用
laydate.render({elem:
'#test5',value: getDatetime(),isInitValue:
true,
});
laydate.render({elem:
'#test5',type:
'datetime',done:
function (value, date, endDate) {$(
'#test5').attr(
"value", value);
var id = $(
'#test5').parent(
'td').parent(
'tr').find(
'td').eq(
0).find(
'input').val();
var dataValue =
"finishAssayTime" +
"," + id +
"," + value;$.ajax({type:
'POST',url: ctx +
"/biz/assay-item-data/update",data: {value: dataValue},dataType:
'JSON',success:
function (res) {var message = res.message;
var td = $(
'#test5').parent(
'td');
var input = $(
'#test5');$(
'#saveInput').append(input);td.empty();
var a = $(
"<a></a>");
var pkValue =
"finishAssayTime" +
"," + id;a.attr(
"data-pk", pkValue);a.text(value);td.append(a);},error:
function () {}});}
});
Append拼接元素
當頁面加載的時候,沒有這些元素,沒有被CSS和JS渲染
Input不需要渲染
Select2設置值之后,調用select2()方法,將select變成select2控件
datetime控件使用的layDate,在頁面加載的時候,放在頁面隱藏的div中,append獲取該元素之后,就會顯示
頁面元素
<
div id=
"saveInput" style=
"display: none"><input path=
"finishAssayTime" type=
"text" class=
"demo-input" placeholder=
"時間選擇器" id=
"test5" value=
""style=
"height: 22px;width:100%;margin: 0px;padding: 0px;"/>
</
div>
失去焦點移除datetime控件的時,需要先將該控件賦給某個頁面元素
如果,直接移除,無法再次獲取到該元素undefined,在清空td,或者tbody之前先賦值給某個隱藏元素
總結
以上是生活随笔為你收集整理的jQuery表格的行编辑的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。