javascript動的追加削除テーブルデータ管理
7816 ワード
この記事では、Javascriptを使ってフォームデータ管理を動的に追加し、主に次のような機能を実現します.
追加ボタンをクリックして空のレコードを追加します.表のセルをクリックしてテキストを変更できます.修正して保存インターフェースを実現しました.新しいレコードを追加しても、何の変更もしていない場合はnullです.すべてを保存するときは無視されます.すべてを保存する時は修正した値だけを保存します.元のデータはもう繰り返し保存しません.更新時にデータが保存されていない場合は保存を促す.削除時に一時的に追加された無効なデータをクリックして直接削除します.保存したレコードがあれば、レコード削除のインターフェースができます.入れ子が多いことを考慮してフォームを使わず、伝えるべきデータをjsで直接解析して分離しました.
まず運転の効果図を見てください.
追加ボタンをクリックして空のレコードを追加します.表のセルをクリックしてテキストを変更できます.修正して保存インターフェースを実現しました.新しいレコードを追加しても、何の変更もしていない場合はnullです.すべてを保存するときは無視されます.すべてを保存する時は修正した値だけを保存します.元のデータはもう繰り返し保存しません.更新時にデータが保存されていない場合は保存を促す.削除時に一時的に追加された無効なデータをクリックして直接削除します.保存したレコードがあれば、レコード削除のインターフェースができます.入れ子が多いことを考慮してフォームを使わず、伝えるべきデータをjsで直接解析して分離しました.
まず運転の効果図を見てください.
Model
//<![CDATA[
var JCRUD=function(tb,colnum,saveAllBtn,add,ajaxSaver,allAjaxSaver,ajaxDeler){
var del = tb.getElementsByTagName('a');
var span = tb.getElementsByTagName('span');
var ctr=[];/* tr */
var delEvent = function(){
var dder = this.parentNode.parentNode;
this.data=[];
for(var i=0; i<dder.children.length-1; i++)
this.data[i] = dder.children[i].children[0].firstChild.nodeValue;
var tag = 0;
for(var j=0; j<this.data.length; j++){
if(this.data[j]!=='null'){/* , */
tag=1;
break;
}
}
for(var k=0; k<ctr.length; k++) if(ctr[k]===dder) ctr.splice(k,1);
dder.parentNode.removeChild(dder);
if(tag==1) ajaxDeler.call(this);
};
var spanEvent = function(){/* */
var value = this.firstChild.nodeValue;
var input = document.createElement('input');
input.value = value;
this.parentNode.appendChild(input);
this.parentNode.removeChild(this);
input.focus();
input.onblur = function(){/* */
var span = document.createElement('span');
span.appendChild(document.createTextNode(this.value?this.value:'null'));/* , */
span.onclick =spanEvent;
this.parentNode.appendChild(span);
this.parentNode.removeChild(this);
if(value!=this.value){/* */
var tr = span.parentNode.parentNode
tds = tr.children;
btns = tds[colnum-1].getElementsByTagName('a');
for(var i=0; i<btns.length; i++){
if(btns[i].firstChild.nodeValue!=' '){
var saver = document.createElement('a');
saver.href="javascript:;";
saver.appendChild(document.createTextNode(' '));
}else{
var saver = btns[i];
}
}
tds[tds.length-1].appendChild(saver);
var tag=0;
for(var k=0; k<ctr.length; k++)
if(ctr[k]===tr) tag=1;
if(tag==-0) ctr.push(tr);
saver.οnclick=function(){/* */
this.data = [];
for(var i=0; i<tds.length-1; i++)
this.data[i] = this.parentNode.parentNode.children[i].children[0].firstChild.nodeValue;
ajaxSaver.call(this);
for(var i=ctr.length-1; i>=0; i--){
if(this.parentNode.parentNode===ctr[i]){
ctr.splice(i,1);
}
}
this.parentNode.removeChild(this);
};
}
}
};
for(var i in del) del[i].onclick = delEvent;/* */
for(var j in span) span[j].onclick = spanEvent;
add.onclick = function(){
var tbody = tb.children[0];
var tr = document.createElement('tr');
for(var j=0; j<colnum; j++){
var td = document.createElement('td');
if(j==(colnum-1)){
var del = document.createElement('a');
del.href='javascript:;';
del.appendChild(document.createTextNode(' '));
del.onclick = delEvent;/* */
td.appendChild(del);
}else{
var span = document.createElement('span');
span.appendChild(document.createTextNode('null'));/* , */
td.appendChild(span);
span.onclick =spanEvent;
}
tr.appendChild(td);
}
tbody.appendChild(tr);
};
var getAllData = function(){/* */
var allData=[];
for(var i=0; i<ctr.length; i++){
allData[i]=[];
for(var j=0; j<ctr[i].children.length-1; j++)
allData[i].push(ctr[i].children[j].children[0].firstChild.nodeValue);
ctr[i].children[colnum-1].removeChild(ctr[i].children[colnum-1].children[1]);
}
ctr=[];
return allData;
};
saveAllBtn.onclick = function(){/* */
this.allData = getAllData();
if(this.allData.length){
allAjaxSaver.call(this);
}else{
alert('No data!');
}
};
window.onbeforeunload = function(){/* */
if(ctr.length){
var y = confirm(' , ?')
if(y){
saveAllBtn.click();
}
}
};
};
window.onload = function(){
var table = document.getElementById('tb'),/* */
colnum = 5,/* */
saveAllBtn = document.getElementById('SaveAll'),/* */
addBtn = document.getElementById('Add'),/* */
saver = function(){
/* ajax data , JSON */
alert(' data :"'+this.data+'" ajax ! ……');
},
allSaver = function(){
/* ajax data , JSON */
alert(' allDtat :"'+this.allData+'" ajax ! ……');
},
deler = function(){
/* ajax data , JSON */
alert(' data :"'+this.data+'" ajax ! ……');
};
window.JCRUD(table,colnum,saveAllBtn,addBtn,saver,allSaver,deler);
};
//]]>
A
B
C
D
Tip:
- 。
- 。
- 。
- null, 。
- , 。
- 。
- , 。