模态对话框-终极版
实现了动态添加,删除。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .hide{ display:none; } .model{ position:fixed; top:50%; left:50%; width:500px; height:400px; margin-left:-250px; margin-top:-250px; background-color:#eeeeee; z-index:10; } .shadow{ position:fixed; top:0; left:0; right:0; bottom:0; opacity:0.6; background-color:black; z-index:9; } </style> </head> <body> <a onclick="addElement();">添加</a> <table border="1px" id="tb"> <tr> <td>1.1.1.11</td> <td>80</td> <td> <a class="edit">编辑</a> | <a class="del">删除</a> </td> </tr> <tr> <td>1.1.1.12</td> <td>80</td> <td> <a class="edit">编辑</a> | <a class="del">删除</a> </td> </tr> <tr> <td>1.1.1.13</td> <td>80</td> <td> <a class="edit">编辑</a> | <a class="del">删除</a> </td> </tr> </table> <div class="model hide"> <div> <input name="hostname" type="text"/> <input name="port" type="text"/> <input type="text"/> </div> <div> <input type="button" value="取消" onclick="cancelModel();"/> <input type="button" value="确定" onclick="confirmModel();"/> </div> </div> <div class="shadow hide"></div> <script src="jquery-1.12.4.js"></script> <script> $('.del').click(function(){ $(this).parent().parent().remove(); }) function confirmModel(){ var tr=document.createElement('tr'); var td1=document.createElement('td'); td1.innerHTML='1.1.1.333'; var td2=document.createElement('td'); td2.innerHTML='8001'; $(tr).append(td1); $(tr).append(td2); $('#tb').append(tr); $(".model,.shadow").addClass('hide'); $('.model input[type="text"]').each(function(){ //var temp="<td>.." var td=document.createElement('td'); td.innerHTMl='用户输入的值'; }) } function addElement(){ //$('.model').removeClass('hide'); //$('.shadow').removeClass('hide'); $('.model,.shadow').removeClass('hide'); } function cancelModel(){ $('.model,.shadow').addClass('hide'); $('.model input[type="text"]').val(""); } $('.edit').click(function(){ $('.model,.shadow').removeClass('hide'); //this 当前点击的标签 var tds=$(this).parent().prevAll(); //tds是个列表,里面是2个td,内容是port,host var port=$(tds[0]).text(); var host=$(tds[1]).text(); $('.model input[name="hostname"]').val(host); $('.model input[name="port"]').val(port); //循环获取tds中的内容,赋值给input标签里面的value。cancel.log(tds[0])=80; }); </script> </body> </html>
按照自己的逻辑写的版本,还有2个地方需要调试。
1) 点击完编辑以后,会增加新的一行,而原数据行还是保留。
2) 新增加的行,没有绑定edit del 事件,所以程序需要用delegate进行绑定。
$('.c1').delegate('a','click',function(){}) #不同于其它,有委托的作用。 .c1 下面所有的a 标签都绑定click事件。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <style> .hide{ display:none; } .shadow{ position:fixed; top:0; left:0; right:0; bottom:0; background-color:black; opacity:0.6; z-index:9; } .model{ position:fixed; top:50%; left:50%; width:500px; height:400px; margin-left:-200px; margin-top:-200px; background-color:#eeeeee; z-index:10; } </style> </head> <body> <div class="addElement">添加</div> <table id="tb" border="1px"> <tr> <td>1.1.1.1</td> <td>80</td> <td> <a class="edit">编辑</a>|<a class="del">删除</a> </td> </tr> <tr> <td>1.1.1.2</td> <td>80</td> <td> <a class="edit">编辑</a>|<a class="del">删除</a> </td> </tr> <tr> <td>1.1.1.3</td> <td>80</td> <td> <a class="edit">编辑</a>|<a class="del">删除</a> </td> </tr> </table> <div class="shadow hide"></div> <div class="model hide"> <input name="hostname" type="text"> <input name="port" type="text"> <input type="text"> <input type="button" value="确定"> <input type="button" value="取消"> </div> <script src="jquery-1.12.4.js"></script> <script> $('.addElement').click(function(){ $('.shadow,.model').removeClass('hide'); $('.model input[type="text"]').val(""); }) $('.model input[value="取消"]').click(function(){ $('.shadow,.model').addClass('hide'); }) $('.model input[value="确定"]').click(function(){ var host=$('.model input[name="hostname"]').val(); var port=$('.model input[name="port"]').val(); var tr=document.createElement('tr'); var td1=document.createElement('td'); td1.innerHTML=host; var td2=document.createElement('td'); td2.innerHTML=port; $(tr).append(td1); $(tr).append(td2); $('#tb').append(tr); $('.shadow,.model').addClass('hide'); }) $('.edit').click(function(){ $('.shadow,.model').removeClass('hide'); var tds=$(this).parent().prevAll(); var port=$(tds[0]).text(); var host=$(tds[1]).text(); $('.model input[name="hostname"]').val(host); $('.model input[name="port"]').val(port); }) $('.del').click(function(){ $(this).parent().parent().remove(); }) </script> </body> </html>