radios.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  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(gName, 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="radio" ' + sChecked + ' name="' + gName + '"></td>';
  104. new_td_node1.innerHTML = '<td><input type="text" value="' + obj.value + '" name="' + gName + '" 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. var dName = $G('hidname').value;
  110. if (!dName) dName = 'leipiNewField';
  111. fnAddComboTr(dName, {
  112. "checked": false,
  113. "name": 'leipiNewField',
  114. "value": ''
  115. });
  116. }
  117. /*组合checkbox*/
  118. function fnParseOptions(gName, gChecked) {
  119. var oTable = document.getElementById('options_table');
  120. var nTr = oTable.getElementsByTagName('tr'), trLength = nTr.length, html = "";
  121. for (var i = 0; i < trLength; i++) {
  122. var inputs = nTr[i].getElementsByTagName('input');
  123. if (inputs.length > 0) {
  124. if (!inputs[1].value) continue;
  125. var sChecked = '';
  126. if (inputs[0].checked) sChecked = 'checked';// 在ie中,checked的值是空的 ,兼容IE 不要改为 checked="checked" 感谢@李静反馈
  127. html += '<input name="' + gName + '" value="' + inputs[1].value + '" ' + sChecked + ' type="radio"/>' + inputs[1].value + '&nbsp;';
  128. if (gChecked == 'orgchecked1')//竖排
  129. html += '<br/>';
  130. }
  131. }
  132. //alert(html);
  133. return html;
  134. }
  135. </script>
  136. </head>
  137. <body>
  138. <div class="content">
  139. <input id="hidname" type="hidden"/>
  140. <table class="table table-bordered table-striped">
  141. <tr>
  142. <th><span>控件名称</span><span class="label label-important">*</span></th>
  143. <th><span>排列方式</span></th>
  144. </tr>
  145. <tr>
  146. <td><input id="orgname" placeholder="必填项" type="text"/></td>
  147. <td>
  148. <label class="radio" title="选项一 选项二"><input id="orgchecked0" checked="checked" name="checked"
  149. type="radio"> 横排 </label>
  150. <label class="radio" title="选项一&#10;选项二"><input id="orgchecked1" name="checked" type="radio"> 竖排
  151. </label>
  152. </td>
  153. </tr>
  154. <tr>
  155. <td colspan="2">
  156. <table class="table table-hover table-condensed" id="options_table">
  157. <tr>
  158. <th>选中</th>
  159. <th>选项值</th>
  160. <th>操作</th>
  161. </tr>
  162. <!--tr>
  163. <td><input type="checkbox" checked="checked"></td>
  164. <td><input type="text" value="选项一"></td>
  165. <td>
  166. <div class="btn-group">
  167. <a title="上移" class="btn btn-small btn-info" href="#"><i class="icon-white icon-arrow-up"></i></a>
  168. <a title="下移" class="btn btn-small btn-info" href="#"><i class="icon-white icon-arrow-down"></i></a>
  169. <a title="删除" class="btn btn-small btn-default"><i class="icon-ban-circle"></i></a>
  170. </div>
  171. </td>
  172. </tr-->
  173. </table>
  174. <a title="添加选项" class="btn btn-primary" onclick="fnAdd();">添加选项</a>
  175. </td>
  176. </tr>
  177. </table>
  178. </div>
  179. <script type="text/javascript">
  180. var oNode = null, thePlugins = 'radios';
  181. window.onload = function () {
  182. if (UE.plugins[thePlugins].editdom) {
  183. oNode = UE.plugins[thePlugins].editdom;
  184. var gTitle = oNode.getAttribute('title').replace(/&quot;/g, "\"");
  185. var gName = oNode.getAttribute('name').replace(/&quot;/g, "\"");
  186. $G('orgname').value = gTitle;
  187. $G('hidname').value = gName;
  188. var checked = oNode.getAttribute('orgchecked');
  189. checked == 'orgchecked1' ? $G('orgchecked1').checked = true : $G('orgchecked0').checked = true;
  190. var inputTags = oNode.getElementsByTagName('input');
  191. var length = inputTags.length;
  192. var aInputs = [];
  193. for (var i = 0; i < length; i++) {
  194. //testEle.setAttribute("test","aaa"); // 自定义属性 设置
  195. //testEle.attributes["test"].nodeValue; // 获得
  196. if (inputTags[i].type == 'radio')
  197. fnAddComboTr(gName, inputTags[i]);
  198. }
  199. }
  200. }
  201. dialog.oncancel = function () {
  202. if (UE.plugins[thePlugins].editdom) {
  203. delete UE.plugins[thePlugins].editdom;
  204. }
  205. };
  206. dialog.onok = function () {
  207. if ($G('orgname').value == '') {
  208. alert('控件名称不能为空');
  209. return false;
  210. }
  211. var gTitle = $G('orgname').value.replace(/\"/g, "&quot;");
  212. var gChecked = 'orgchecked0';
  213. if ($G('orgchecked1').checked) gChecked = 'orgchecked1';
  214. if (!oNode) {
  215. try {
  216. var options = fnParseOptions("leipiNewField", gChecked);
  217. if (!options) {
  218. alert('请添加选项');
  219. return false;
  220. }
  221. //{|- 使用边界,防止用户删除了span标签
  222. var html = '{|-<span leipiplugins="radios" title="' + gTitle + '" name="leipiNewField">';
  223. html += options;
  224. html += '</span>-|}';
  225. editor.execCommand('insertHtml', html);
  226. return true;
  227. } catch (e) {
  228. try {
  229. editor.execCommand('error');
  230. } catch (e) {
  231. alert('控件异常,请到 [雷劈网] 反馈或寻求帮助!');
  232. }
  233. return false;
  234. }
  235. } else {
  236. var gName = oNode.getAttribute('name').replace(/&quot;/g, "\"");
  237. oNode.setAttribute('title', gTitle);
  238. oNode.setAttribute('orgchecked', gChecked);
  239. oNode.innerHTML = fnParseOptions(gName, gChecked);
  240. delete UE.plugins[thePlugins].editdom;
  241. return true;
  242. }
  243. };
  244. </script>
  245. </body>
  246. </html>