`
53873039oycg
  • 浏览: 843946 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

jQuery结合Handlebars生成简单的Input,Select

 
阅读更多

       下面的例子是使用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,则需要自己写方法了

 

      本文系原创,转载请注明出处,谢谢

      全文完

     

 

  • 大小: 21.4 KB
  • 大小: 41.2 KB
0
0
分享到:
评论

相关推荐

    jquery.tmpl.js使用例子

    以下是如何使用jQuery与tmpl.js结合的示例: ```javascript var data = { items: [ { name: "Item 1" }, { name: "Item 2" }, { name: "Item 3" } ] }; $("#template").tmpl(data).appendTo("body"); ``` 这...

    LazyForm radio,checkbox,select样式自定义

    3. **模板引擎**:可能使用了模板引擎(如Handlebars或Mustache)来生成自定义的HTML结构,将传统的radio、checkbox和select转换为更复杂的UI组件。 4. **数据绑定**:可能支持数据双向绑定,使得表单值的变化能...

    select多级动态联动

    4. 模板引擎:为了使代码更易维护和扩展,可以使用模板引擎(如Mustache、Handlebars)来生成`&lt;option&gt;`元素,这样在数据结构改变时,只需要更新模板即可。 5. 预填充:如果需要初始值,可以在页面加载时就执行联动...

    JQuery实现按省选择全国高校插件

    7. **前端模板引擎**:为了更高效地生成高校列表,插件可能结合使用了前端模板引擎,如Mustache或Handlebars,这样可以将数据和HTML模板分离,提高代码可维护性。 8. **插件化开发**:jQuery插件通常遵循一定的设计...

    BirthdayList:生成生日下拉数据

    在IT行业中,JavaScript是一种广泛...在实际开发中,开发者可能还会结合其他技术,如模板引擎(如 Handlebars 或 Mustache)来生成HTML,或者使用现代前端框架(如React、Vue或Angular)来更高效地管理状态和DOM操作。

    jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表

    - 可以考虑使用模板引擎(如Handlebars或Mustache)来动态生成HTML,以保持视图和逻辑分离。 - 使用`$.ajaxSetup`可以设置全局的Ajax选项,如超时、缓存等。 - 对于大型数据集,考虑分页或延迟加载以提高性能。 ...

    省三级联动

    在实现过程中,可以借助现有的JS库或组件,如jQuery UI、Bootstrap Selectpicker或者一些专门的级联选择插件,它们提供了封装好的API和配置项,可以简化开发流程。 综上所述,"省三级联动"是前端开发中的一个重要...

    40个实用的轻量级JavaScript库

    9. **Chart.js**:简单易用的图表库,适用于快速生成基本的统计图表。 10. **Ractive.js**:双向数据绑定的库,提供模板和组件功能,渲染性能优秀。 11. **Backbone.js**:轻量级MVC框架,提供模型、视图和集合的...

    城市三级联动.rar

    6. **模板引擎**:如果数据量较大,可以使用模板引擎(如Handlebars, Mustache)生成HTML代码,减少手动拼接字符串的复杂度和错误。 7. **优化与兼容性**:考虑到不同浏览器的兼容性,可能需要使用jQuery等库进行...

    分组下拉框

    2. 模板引擎:使用模板引擎(如EJS、 Handlebars 或者 Vue 的模板语法)来根据数据生成HTML结构。这使得我们可以轻松地控制分组和选项的显示。 3. 事件处理:添加事件监听器来响应用户的操作,比如点击事件,当用户...

    analytics_portal

    8. **模板引擎**:对于复杂的动态内容,开发人员可能使用模板引擎(如Handlebars或Pug),将HTML与数据绑定,方便数据驱动的页面生成。 9. **SEO优化**:为了提高搜索引擎可见性,了解HTML的SEO最佳实践也很重要,...

    紫色多形式表单网页模板

    9. **模板引擎**:一些网页模板可能使用模板引擎(如EJS、Pug、Handlebars等),这些工具能将静态HTML模板与动态数据结合,生成完整的网页。 10. **SEO优化**:在设计网页模板时,要考虑搜索引擎优化(SEO),如...

    67 个节约开发时间的前端开发者的工具、库和资源

    43. **Select2**:增强型jQuery选择框插件,提供高级筛选和搜索功能。 44. **IziToast**:创建美观的通知弹窗。 45. **IziModal**:模态框库,提供定制化选项。 **CSS库和设计相关** 1. **Animate.css**:包含多种...

    Ohara-Shop

    在深入研究"Ohara-Shop"项目时,了解HTML的基本语法和特性是非常重要的,包括标签、属性、类选择器、ID选择器、布局容器(如`&lt;div&gt;`)、表单元素(如`&lt;input&gt;`、`&lt;select&gt;`)以及如何通过`&lt;link&gt;`和`&lt;script&gt;`标签...

    08-sql-library-manager:项目8-SQL库管理器

    5. **Handlebars或EJS**:模板引擎,将数据绑定到HTML模板,生成动态页面。 6. **AJAX或WebSockets**:实现实时数据同步和推送。 【数据库连接与SQL操作】 项目可能会使用诸如Node.js的Express框架在后端处理SQL...

Global site tag (gtag.js) - Google Analytics