下面的例子是使用Handlebars生成简单的input,select ,代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>利用Handlebars动态生成input</title> <style> * { margin: 0px; padding: 0px; margin: 0 auto; } #contentDiv { width: 800px; margin: 0 auto; border-bottom: 2px solid #e6e6e6; padding:0 0 10px 0; } #titleDiv { padding: 30px 0 5px 5px; font: 500 18px "微软雅黑"; } #inputDiv { border-top: 2px solid #e6e6e6; vertical-align: middle; padding: 5px 0 0 7px; } #inputDiv input { width: 120px; } #inputDiv span { font-size: 14px; } .fixClass { width: 120px; height: 22px; line-height: 20px; } #submitDiv { padding: 20px 0 15px 0; text-align: center; } .spanClass { color: #fff; background: #89D900; height: 25px; width: 100px; display: inline-block; line-height: 25px; font-weight: bold; text-align: center; cursor: pointer; } .banClass { padding: 0 20px 0 20px; } </style> <script type="text/javascript" src="../../js/jquery-2.1.0.js"></script> <script type="text/javascript" src="../../js/wdatepicker/WdatePicker.js"></script> <script type="text/javascript" src="../../js/handlebars-v1.3.0.js"></script> <script type="text/javascript"> var inputNormalTemp = { 'result_temp' : '<input type="text" id="{{V_KEY}}" name="{{V_KEY}}">' }; var inputDateTemp = { 'result_temp' : '<input type="text" id="{{V_KEY}}" name="{{V_KEY}}" class="Wdate" onfocus="WdatePicker({{V_DateFocus}})">' }; var selectTemp = { 'result_temp' : '<select name="{{V_KEY}}" id="{{V_KEY}}" class="fixClass">' + '<option value="-1">所有</option>' + '{{#each selectData}}' + '<option value="{{S_KEY}}">{{S_VALUE}}</option>' + '{{/each}}</select>' }; var hiddenTemp = { 'result_temp' : '<input type="hidden" id="{{V_KEY}}" name="{{V_KEY}}" value="{{V_VALUE}}" />' }; var typeTemp = { 'text' : inputNormalTemp, 'date' : inputDateTemp, 'select' : selectTemp, 'hidden' : hiddenTemp }; function generateTableData(v_jsonData, v_form) { var jsonData = v_jsonData.data; var varTableHtml = '<table cellpadding="0" cellspacing="0" border="0" width="100%">'; for (var i = 0, len = jsonData.length; i < len;) { varTableHtml += "<tr>"; /* 注意不要越界 */ for (var j = 0; j < 3&&i<len; j++) { var varType = jsonData[i].V_TYPE; var varTemp =Handlebars.compile(typeTemp[varType].result_temp); var varHtml =varTemp(jsonData[i]);/* 注意和上面的变量一样 */ if (varType!='hidden') { varTableHtml += "<td><label>" + jsonData[i].V_NAME + ":</label></td><td>" + varHtml + "</td>"; } else { varTableHtml += varHtml; } i++; } varTableHtml += "</tr>"; } varTableHtml += "</table>"; $('#' + v_form).html(varTableHtml); } var jsonData = { data : [ { V_TYPE : "date", V_KEY : "begin_date", V_NAME : "开始时间", V_DateFocus: "{startDate:'%y',dateFmt:'yyyy-MM-dd',alwaysUseStartDate:true,maxDate:'#F{$dp.$D(\\'end_date\\')}'}", }, { V_TYPE : "date", V_KEY : "end_date", V_NAME : "结束时间", V_DateFocus:"{startDate:'%y',dateFmt:'yyyy-MM-dd',alwaysUseStartDate:true,maxDate:'#F{\\'2099-12-31\\'}',minDate:'#F{$dp.$D(\\'begin_date\\')}'}", }, { V_TYPE : "select", V_KEY : "selectId", V_NAME : "测试单选", selectData : [ { S_KEY : "1", S_VALUE : "测试" }, { S_KEY : "2", S_VALUE : "测试2" }, { S_KEY : "3", S_VALUE : "测试3" } ] }, { V_TYPE : "hidden", V_KEY : "hiddenId", V_VALUE : "123" }] }; function closeWin() { var browserName = navigator.appName; if (browserName == "Netscape") { var opened = window.open('about:blank', '_self'); opened.opener = null; opened.close(); } else if (browserName == "Microsoft Internet Explorer") { window.opener = null; window.open('', '_self'); window.close(); } } $(function() { generateTableData(jsonData, "inputForm"); $('#sbtSpan').on('click',function() { var varForm = $('#inputForm').serialize(); console.log(varForm); }); $('#closeSpan').on('click',closeWin); }); </script> </head> <body> <div id="contentDiv"> <div id="titleDiv"> <label>名称:HandlerBars动态生成Input</label> </div> <div id="inputDiv"> <form method="post" action="#" id="inputForm"> </form> </div> <div id="submitDiv"> <span class="spanClass" id="sbtSpan">提交</span> <span class="banClass" /> <span class="spanClass" id="closeSpan">关闭</span> </div> </div> </body> </html>
结果如下:
点击提交,结果为:
其他的效果,如校验,select关联下级select,则需要自己写方法了。
本文系原创,转载请注明出处,谢谢。
全文完。
相关推荐
以下是如何使用jQuery与tmpl.js结合的示例: ```javascript var data = { items: [ { name: "Item 1" }, { name: "Item 2" }, { name: "Item 3" } ] }; $("#template").tmpl(data).appendTo("body"); ``` 这...
3. **模板引擎**:可能使用了模板引擎(如Handlebars或Mustache)来生成自定义的HTML结构,将传统的radio、checkbox和select转换为更复杂的UI组件。 4. **数据绑定**:可能支持数据双向绑定,使得表单值的变化能...
4. 模板引擎:为了使代码更易维护和扩展,可以使用模板引擎(如Mustache、Handlebars)来生成`<option>`元素,这样在数据结构改变时,只需要更新模板即可。 5. 预填充:如果需要初始值,可以在页面加载时就执行联动...
7. **前端模板引擎**:为了更高效地生成高校列表,插件可能结合使用了前端模板引擎,如Mustache或Handlebars,这样可以将数据和HTML模板分离,提高代码可维护性。 8. **插件化开发**:jQuery插件通常遵循一定的设计...
在IT行业中,JavaScript是一种广泛...在实际开发中,开发者可能还会结合其他技术,如模板引擎(如 Handlebars 或 Mustache)来生成HTML,或者使用现代前端框架(如React、Vue或Angular)来更高效地管理状态和DOM操作。
- 可以考虑使用模板引擎(如Handlebars或Mustache)来动态生成HTML,以保持视图和逻辑分离。 - 使用`$.ajaxSetup`可以设置全局的Ajax选项,如超时、缓存等。 - 对于大型数据集,考虑分页或延迟加载以提高性能。 ...
在实现过程中,可以借助现有的JS库或组件,如jQuery UI、Bootstrap Selectpicker或者一些专门的级联选择插件,它们提供了封装好的API和配置项,可以简化开发流程。 综上所述,"省三级联动"是前端开发中的一个重要...
9. **Chart.js**:简单易用的图表库,适用于快速生成基本的统计图表。 10. **Ractive.js**:双向数据绑定的库,提供模板和组件功能,渲染性能优秀。 11. **Backbone.js**:轻量级MVC框架,提供模型、视图和集合的...
6. **模板引擎**:如果数据量较大,可以使用模板引擎(如Handlebars, Mustache)生成HTML代码,减少手动拼接字符串的复杂度和错误。 7. **优化与兼容性**:考虑到不同浏览器的兼容性,可能需要使用jQuery等库进行...
2. 模板引擎:使用模板引擎(如EJS、 Handlebars 或者 Vue 的模板语法)来根据数据生成HTML结构。这使得我们可以轻松地控制分组和选项的显示。 3. 事件处理:添加事件监听器来响应用户的操作,比如点击事件,当用户...
8. **模板引擎**:对于复杂的动态内容,开发人员可能使用模板引擎(如Handlebars或Pug),将HTML与数据绑定,方便数据驱动的页面生成。 9. **SEO优化**:为了提高搜索引擎可见性,了解HTML的SEO最佳实践也很重要,...
9. **模板引擎**:一些网页模板可能使用模板引擎(如EJS、Pug、Handlebars等),这些工具能将静态HTML模板与动态数据结合,生成完整的网页。 10. **SEO优化**:在设计网页模板时,要考虑搜索引擎优化(SEO),如...
43. **Select2**:增强型jQuery选择框插件,提供高级筛选和搜索功能。 44. **IziToast**:创建美观的通知弹窗。 45. **IziModal**:模态框库,提供定制化选项。 **CSS库和设计相关** 1. **Animate.css**:包含多种...
在深入研究"Ohara-Shop"项目时,了解HTML的基本语法和特性是非常重要的,包括标签、属性、类选择器、ID选择器、布局容器(如`<div>`)、表单元素(如`<input>`、`<select>`)以及如何通过`<link>`和`<script>`标签...
5. **Handlebars或EJS**:模板引擎,将数据绑定到HTML模板,生成动态页面。 6. **AJAX或WebSockets**:实现实时数据同步和推送。 【数据库连接与SQL操作】 项目可能会使用诸如Node.js的Express框架在后端处理SQL...