checkboxs.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title>复选框</title>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  7. <meta name="generator" content="www.leipi.org"/>
  8. <link rel="stylesheet" href="bootstrap/css/bootstrap.css">
  9. <!--[if lte IE 6]>
  10. <link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap-ie6.css">
  11. <![endif]-->
  12. <!--[if lte IE 7]>
  13. <link rel="stylesheet" type="text/css" href="bootstrap/css/ie.css">
  14. <![endif]-->
  15. <link rel="stylesheet" href="leipi.style.css">
  16. <script type="text/javascript" src="../dialogs/internal.js"></script>
  17. <script type="text/javascript">
  18. function createElement(type, name) {
  19. var element = null;
  20. try {
  21. element = document.createElement('<' + type + ' name="' + name + '">');
  22. } catch (e) {
  23. }
  24. if (element == null) {
  25. element = document.createElement(type);
  26. element.name = name;
  27. }
  28. return element;
  29. }
  30. //checkboxs
  31. function isIE() {
  32. if (window.attachEvent) {
  33. return true;
  34. }
  35. return false;
  36. }
  37. //moveRow在IE支持而在火狐里不支持!以下是扩展火狐下的moveRow
  38. if (!isIE()) {
  39. function getTRNode(nowTR, sibling) {
  40. while (nowTR = nowTR[sibling]) if (nowTR.tagName == 'TR') break;
  41. return nowTR;
  42. }
  43. if (typeof Element != 'undefined') {
  44. Element.prototype.moveRow = function (sourceRowIndex, targetRowIndex) //执行扩展操作
  45. {
  46. if (!/^(table|tbody|tfoot|thead)$/i.test(this.tagName) || sourceRowIndex === targetRowIndex) return false;
  47. var pNode = this;
  48. if (this.tagName == 'TABLE') pNode = this.getElementsByTagName('tbody')[0]; //firefox会自动加上tbody标签,所以需要取tbody,直接table.insertBefore会error
  49. var sourceRow = pNode.rows[sourceRowIndex],
  50. targetRow = pNode.rows[targetRowIndex];
  51. if (sourceRow == null || targetRow == null) return false;
  52. var targetRowNextRow = sourceRowIndex > targetRowIndex ? false : getTRNode(targetRow, 'nextSibling');
  53. if (targetRowNextRow === false) pNode.insertBefore(sourceRow, targetRow); //后面行移动到前面,直接insertBefore即可
  54. else { //移动到当前行的后面位置,则需要判断要移动到的行的后面是否还有行,有则insertBefore,否则appendChild
  55. if (targetRowNextRow == null) pNode.appendChild(sourceRow);
  56. else pNode.insertBefore(sourceRow, targetRowNextRow);
  57. }
  58. }
  59. }
  60. }
  61. /*删除tr*/
  62. function fnDeleteRow(obj) {
  63. var oTable = document.getElementById("options_table");
  64. while (obj.tagName != 'TR') {
  65. obj = obj.parentNode;
  66. }
  67. oTable.deleteRow(obj.rowIndex);
  68. }
  69. /*上移*/
  70. function fnMoveUp(obj) {
  71. var oTable = document.getElementById("options_table");
  72. while (obj.tagName != 'TR') {
  73. obj = obj.parentNode;
  74. }
  75. var minRowIndex = 1;
  76. var curRowIndex = obj.rowIndex;
  77. if (curRowIndex - 1 >= minRowIndex) {
  78. oTable.moveRow(curRowIndex, curRowIndex - 1);
  79. }
  80. }
  81. /*下移*/
  82. function fnMoveDown(obj) {
  83. var oTable = document.getElementById("options_table");
  84. while (obj.tagName != 'TR') {
  85. obj = obj.parentNode;
  86. }
  87. var maxRowIndex = oTable.rows.length;
  88. var curRowIndex = obj.rowIndex;
  89. if (curRowIndex + 1 < maxRowIndex) {
  90. oTable.moveRow(curRowIndex, curRowIndex + 1);
  91. }
  92. }
  93. /*生成tr*/
  94. function fnAddComboTr(obj) {
  95. var oTable = document.getElementById('options_table');
  96. var new_tr_node = oTable.insertRow(oTable.rows.length);
  97. var new_td_node0 = new_tr_node.insertCell(0), new_td_node1 = new_tr_node.insertCell(1),
  98. new_td_node2 = new_tr_node.insertCell(2);
  99. var sChecked = '';
  100. if (obj.checked) sChecked = 'checked="checked"';
  101. if (!obj.name) obj.name = '';
  102. if (!obj.value) obj.value = '';
  103. new_td_node0.innerHTML = '<td><input type="checkbox" ' + sChecked + '></td>';
  104. new_td_node1.innerHTML = '<td><input type="text" value="' + obj.value + '" name="' + obj.name + '" placeholder="选项值"></td>';
  105. new_td_node2.innerHTML = '<td><div class="btn-group"><a title="上移" class="btn btn-small btn-info" href="javascript:void(0);" onclick="fnMoveUp(this)"><i class="icon-white icon-arrow-up"></i></a><a title="下移" class="btn btn-small btn-info" href="javascript:void(0);" onclick="fnMoveDown(this)"><i class="icon-white icon-arrow-down"></i></a><a title="删除" class="btn btn-small btn-default" href="javascript:void(0);" onclick="fnDeleteRow(this)"><i class="icon-ban-circle"></i></a></div></td>';
  106. return true;
  107. }
  108. function fnAdd() {
  109. fnAddComboTr({
  110. "checked": false,
  111. "name": 'leipiNewField',
  112. "value": ''
  113. });
  114. }
  115. /*组合checkbox*/
  116. function fnParseOptions(gChecked) {
  117. var oTable = document.getElementById('options_table');
  118. var nTr = oTable.getElementsByTagName('tr'), trLength = nTr.length, html = "";
  119. for (var i = 0; i < trLength; i++) {
  120. var inputs = nTr[i].getElementsByTagName('input');
  121. if (inputs.length > 0) {
  122. if (!inputs[1].value) continue;
  123. var sChecked = '';
  124. if (inputs[0].checked) sChecked = 'checked="checked"';
  125. html += '<input name="' + inputs[1].name + '" value="' + inputs[1].value + '" ' + sChecked + ' type="checkbox"/>' + inputs[1].value + '&nbsp;';
  126. if (gChecked == 'orgchecked1')//竖排
  127. html += '<br/>';
  128. }
  129. }
  130. //alert(html);
  131. return html;
  132. }
  133. </script>
  134. </head>
  135. <body>
  136. <div class="content">
  137. <table class="table table-bordered table-striped">
  138. <tr>
  139. <th><span>控件名称</span><span class="label label-important">*</span></th>
  140. <th><span>排列方式</span></th>
  141. </tr>
  142. <tr>
  143. <td><input id="orgname" placeholder="必填项" type="text"/></td>
  144. <td>
  145. <label class="radio" title="选项一 选项二"><input id="orgchecked0" checked="checked" name="checked"
  146. type="radio"> 横排 </label>
  147. <label class="radio" title="选项一&#10;选项二"><input id="orgchecked1" name="checked" type="radio"> 竖排
  148. </label>
  149. </td>
  150. </tr>
  151. <tr>
  152. <td colspan="2">
  153. <table class="table table-hover table-condensed" id="options_table">
  154. <tr>
  155. <th>选中</th>
  156. <th>选项值</th>
  157. <th>操作</th>
  158. </tr>
  159. <!--tr>
  160. <td><input type="checkbox" checked="checked"></td>
  161. <td><input type="text" value="选项一"></td>
  162. <td>
  163. <div class="btn-group">
  164. <a title="上移" class="btn btn-small btn-info" href="#"><i class="icon-white icon-arrow-up"></i></a>
  165. <a title="下移" class="btn btn-small btn-info" href="#"><i class="icon-white icon-arrow-down"></i></a>
  166. <a title="删除" class="btn btn-small btn-default"><i class="icon-ban-circle"></i></a>
  167. </div>
  168. </td>
  169. </tr-->
  170. </table>
  171. <a title="添加选项" class="btn btn-primary" onclick="fnAdd();">添加选项</a>
  172. </td>
  173. </tr>
  174. </table>
  175. </div>
  176. <script type="text/javascript">
  177. var oNode = null, thePlugins = 'checkboxs';
  178. window.onload = function () {
  179. if (UE.plugins[thePlugins].editdom) {
  180. oNode = UE.plugins[thePlugins].editdom;
  181. var gTitle = oNode.getAttribute('title').replace(/&quot;/g, "\"");
  182. $G('orgname').value = gTitle;
  183. var checked = oNode.getAttribute('orgchecked');
  184. checked == 'orgchecked1' ? $G('orgchecked1').checked = true : $G('orgchecked0').checked = true;
  185. var inputTags = oNode.getElementsByTagName('input');
  186. var length = inputTags.length;
  187. var aInputs = [];
  188. for (var i = 0; i < length; i++) {
  189. //testEle.setAttribute("test","aaa"); // 自定义属性 设置
  190. //testEle.attributes["test"].nodeValue; // 获得
  191. if (inputTags[i].type == 'checkbox')
  192. fnAddComboTr(inputTags[i]);
  193. }
  194. }
  195. }
  196. dialog.oncancel = function () {
  197. if (UE.plugins[thePlugins].editdom) {
  198. delete UE.plugins[thePlugins].editdom;
  199. }
  200. };
  201. dialog.onok = function () {
  202. if ($G('orgname').value == '') {
  203. alert('控件名称不能为空');
  204. return false;
  205. }
  206. var gTitle = $G('orgname').value.replace(/\"/g, "&quot;");
  207. var gChecked = 'orgchecked0';
  208. if ($G('orgchecked1').checked) gChecked = 'orgchecked1';
  209. if (!oNode) {
  210. try {
  211. var gTimestamp = new Date().getTime();//相同的gTimestamp为同一组checkbox
  212. var options = fnParseOptions(gTitle, gChecked, gTimestamp);
  213. if (!options) {
  214. alert('请添加选项');
  215. return false;
  216. }
  217. //{|- 使用边界,防止用户删除了span标签,程序处理要把边界替换为空
  218. var html = '{|-<span leipiplugins="checkboxs" title="' + gTitle + '">';
  219. html += options;
  220. html += '</span>-|}';
  221. editor.execCommand('insertHtml', html);
  222. return true;
  223. } catch (e) {
  224. try {
  225. editor.execCommand('error');
  226. } catch (e) {
  227. alert('控件异常,请到 [雷劈网] 反馈或寻求帮助!');
  228. }
  229. return false;
  230. }
  231. } else {
  232. oNode.setAttribute('title', gTitle);
  233. oNode.setAttribute('orgchecked', gChecked);
  234. oNode.innerHTML = fnParseOptions(gChecked);
  235. delete UE.plugins[thePlugins].editdom;
  236. return true;
  237. }
  238. };
  239. </script>
  240. </body>
  241. </html>