探讨:如何更快的赋值取值

背景


  显示数据时,常规赋值与取值是这样的.


// set
$("#name").val(data.name);
$("#realname").val(data.realname);
$("#address").val(data.address);
$("#sex").val(data.name);
$("#love").attr(!!data.love);

// get
var data = {
name:$("#name").val(),
realname:$("#realname").val(),
address:$("#address").val(),
sex:$("#sex").val(),
love:$("#love").attr(‘checked‘)
};

  最近的项目字段是相当多,大概有30+,楼主写的也郁闷了。赋值与取值,真是机械活。于是想到表单提交时,不准确的说,是后台接收到的数据均是控件的name与value的键值对,既然表单可以这样直接取值,并提交给后台,那赋值也应该是可以的。

  总结楼主的需求,获取到一个实体对象,直接将对象的数据赋值到页面的控件中。根据实体对象的定义,直接取得页面上控件的值,以对象形式返回。

实现

  看不明白没关系,大意就是这样,先来看看页面与js调用是怎么写的。


    <form id="form1">
<input type="text" name="uid" />
<input type="text" name="pwd" />
<input type="checkbox" name="love" />
<input type="radio" name="g1" value="1" />
<input type="radio" name="g1" value="2" />
<input type="radio" name="g1" value="3" />
<input type="text" name="gselect" value />
<select name="sl">
<option value="11">11</option>
<option value="22">22</option>
</select>
</form>
<input type="button" id="btn" value="取值" />

  表单里的控件均指定了name,作为存值或取值的key。


    var data = {
uid: ‘cnblogs‘,
pwd: ‘12345‘,
sl: ‘22‘,
love: true,
g1: ‘3‘,
gselect: function () {
return $("#form1 [name=g1]:checked").val();
}
};
$("#btn").on(‘click‘, function () {
var d = $("#form1").getModel(data);
alert(JSON.stringify(d));
});
$("#form1").setModel(data);

  这样就能完成赋值与取值了。其中具体实现则是根据控件的类型,取出相应的值,如vakue属性,checked属性等。

  初步实现是这样的,可以根据实际的应用做修改。


    (function ($) {
function BindModel(p) {
p = $.extend({ method: ‘get‘, data: {} }, p);
var isGet = p.method == "get";
var ret = {};
for (var name in p.data) {

var $name = $(p.container).find("[name=‘" + name + "‘]");

//未找到则跳过
if (!$name.length) continue;

//获取当前对象值
var value;
if (typeof p.data[name] == "function") {
//为函数时,取值就终止
if (isGet) {
ret[name] = p.data[name].call();
continue;
}
else {
value = p.data[name].call();
}
} else {
value = p.data[name];
}

//根据控件类型来赋值
var tag = $name[0].tagName;
var t = $name.attr("type");
if (tag == "SELECT" || t == "text") {
if (isGet) ret[name] = $name.val();
else $name.val(value || ‘‘);
} else if (t == "checkbox") {
if (isGet) ret[name] = !!$name.attr(‘checked‘);
else $name.attr(‘checked‘, !!value);
} else if (t == "radio") { //单选框name相同为一组,根据value来区分啦
$name.each(function () {
if (isGet && this.checked) {
ret[name] = this.value;
return false;
}
else if (!isGet && this.value == value) {
this.checked = true;
}
});
}
else if (tag == ‘TD‘ || tag == ‘SPAN‘) {
if (isGet) ret[name] = $name.text();
else $name.text(value)
}
}
if (isGet) return ret;
}
$.fn.setModel = function (data) {
BindModel({ method: ‘set‘, data: data, container: this });
}
$.fn.getModel = function (data) {
return BindModel({ method: ‘get‘, data: data, container: this });
}
})(jQuery);

  此举的目的旨在维护老项目时,让大家取值赋值更快,解放亲们的双手。

  目前是一个想法与初步实现,如果你有更好的想法,欢迎告知一二,先谢过。

  打包下载

时间: 2024-10-21 15:22:51

探讨:如何更快的赋值取值的相关文章

ASP.Net TextBox只读时不能通过后台赋值取值

给页面的TextBox设置ReadOnly="True"时,在后台代码中不能赋值取值,下边几种方法可以避免: 1.不设置ReadOnly,设置onfocus=this.blur() C#代码 <asp:TextBox ID="TextBox1" runat="server" onfocus=this.blur()></asp:TextBox> [c#] view plaincopyprint? <asp:TextBo

Loadrunner 关于参数赋值取值的操作

1.参数的赋值和取值 lr_save_string("hello world","param"); lr_eval_string("{param}"); 2.变量到参数 int x; char *y; y="hello"; x=10; lr_save_int(x,"param"); lr_save_string(y,"param1"); lr_eval_string("{par

s:radio 赋值取值和添加事件

<s:radio list="#{'1':'未锁','2':'锁定'}" cssClass="lockFlag" id="lockFlag" name="obj.lockFlag" theme="simple" cssStyle="width: 30px;" > </s:radio> //取值 var flag = $("input[name='obj.

jquery给div,Span,赋值取值

jquery给div的innerHTML赋值 $("#id").html()="test"; //或者 $("#id").html("test"); jquery 给span 赋值 $('#hiddenNote').text(‘getSpanValues’); span取值 $('#hiddenNote').text(); 原文地址:https://www.cnblogs.com/zhongzhipeng/p/11375213

JQuery里属性赋值,取值prop()和attr()方法?

1.赋值的时候 如果是<input type="checkbox" checked>这样的只有属性名就能生效的属性 推荐prop,即:$('input').prop('checked',true); 同时,false表示取消,即:$('input').prop('checked',false); 当然attr也行的:$('input').attr('checked','这里写什么都行的'); 取消属性就是移除:$('input').removeAttr('checked')

JQuery里input属性赋值,取值prop()和attr()方法?

一.赋值的时候 如果是<input type="checkbox" checked>这样的只有属性名就能生效的属性 推荐prop,即:$('input').prop('checked',true); 同时,false表示取消,即:$('input').prop('checked',false); 当然attr也行的:$('input').attr('checked','这里写什么都行的'); 取消属性就是移除:$('input').removeAttr('checked')

jQuery的取节点与更快的CSS样式改变

jQuery中使用 $ ,可以通过元素的id, css class或 tag name很容易的获取到相应的元素. 这让之前取节点的繁琐变的简单.简短.简洁.并且为了更加方便的可以选择到相应的元素,提供了筛选的功能. 例: $(“p:gt(2)”) //2以上的元素$("p:lt(10)”) // 0-9   $(“p:empty”) //没有子孩子的p 还在匹配的元素中,设置一个样式属性的值 例: $("p").css("color","red&

【转】jQuery 取值、赋值的基本方法整理

这篇文章主要介绍了jQuery 取值.赋值的基本方法,需要的朋友可以参考下 /*获得TEXT.AREATEXT的值*/ var textval = $("#text_id").attr("value"); //或者 var textval = $("#text_id").val(); /*获取单选按钮的值*/ var valradio = $("input[@type=radio][@checked]").val(); /*获

jQuery对html元素的取值与赋值实例详解

jQuery对html元素的取值与赋值实例详解 转载  2015-12-18   作者:欢欢   我要评论 这篇文章主要介绍了jQuery对html元素的取值与赋值,较为详细的分析了jQuery针对常见html元素的获取与赋值技巧,非常简单实用,需要的朋友可以参考下 本文实例讲述了jQuery对html元素的取值与赋值方法.分享给大家供大家参考,具体如下: Jquery给基本控件的取值.赋值 TEXTBOX: ? 1 2 3 4 5 var str = $('#txt').val(); $('#