dwz 时间控件 onchange方法

本文介绍如何扩展DWZ时间控件,实现在选择时间后不仅给当前控件赋值,还能给另一个页面的隐藏域赋值。通过添加openChange属性并监听change事件达成目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做前台的时候,用dwz的时间控件

需要实现:

在选择时间后,不仅要给当前时间控件的input的输入框赋值,同时还要给另外的一个页面的隐藏域input赋值

解决思路:

在时间控件的input选择赋值后,触发该input的onchange方法,但是发现并未触发,上网上搜了下,发现:

当一个HTML元素的属性改变的时候,都能通过onpropertychange来捕获。例如< input name="text1" id="text1" />对象的value属性被页面的脚本修改的时候,onchange无法捕获到,而onpropertychange却能够捕获。
具体理解为:onpropertychange能及时捕获属性值的变化,而onchange在属性值改变时只有通过鼠标执行某些操作才能激活该事件!

但onpropertychange只有IE支持,FireFox下的怎么解决呢?firefox的事件oninput,效果和IE的onproperchange相同。

(摘自:http://blog.csdn.net/gavin_ku/article/details/2303459)

由于是时间控件直接改变的input的value值,因此无法触发onchange方法,

于是,想到扩展dwz的时间控件,如下:

1.给时间控件加上另外一个属性openChange,并在页面上将该属性至为true

代码:

<input type="text" name="openDate1" class="date" dateFmt="yyyy-MM-dd" readonly="true" style="float:left" 

      οnchange="onchangeValue(this);"  注:onchangeValue(this)是要触发的方法

      openChange="true"   注:将openChange定义两个参数:true和false,true为执行onchange方法

      minDate="{%y-10}-%M-%d" 

      maxDate="{%y}-%M-{%d}"

minDate="{%y-10}-%M" maxDate="{%y+10}-%M"

minDate="{%y-10}" maxDate="{%y+10}"/>

<a class="inputDateButton" href="javascript:;">选择</a>

2.在dwz.ui.js找到调用fn.datepicker的地方,并添加if ($this.attr("openChange")) opts.openChange = $this.attr("openChange");

代码:

if ($.fn.datepicker){

$('input.date', $p).each(function(){

var $this = $(this);

var opts = {};

if ($this.attr("dateFmt")) opts.pattern = $this.attr("dateFmt");

if ($this.attr("minDate")) opts.minDate = $this.attr("minDate");

if ($this.attr("maxDate")) opts.maxDate = $this.attr("maxDate");

if ($this.attr("mmStep")) opts.mmStep = $this.attr("mmStep");

if ($this.attr("ssStep")) opts.ssStep = $this.attr("ssStep");

if ($this.attr("openChange")) opts.openChange = $this.attr("openChange");注:添加这句

$this.datepicker(opts);

});

}

3.在dwz.datepicker.js中找到return this.each(function(),如下修改:


代码:

return this.each(function(){

var $this = $(this);

var dp = new Datepicker($this.val(), opts);

var openChange=dp.get('openChange');注:添加这句,获取openchange值

.....

.....

function closeCalendar() {

$(setting.box$).remove();

if(openChange=='true'){            注:添加这三句

$this.triggerHandler('change');

}

$(document).unbind("click", closeCalendar);

}

......

......


4.在dwz.datepicker.js中找到var Datepicker = function(sDate, opts)如下修改:

代码:

var Datepicker = function(sDate, opts) {

this.opts = $.extend({

pattern:'yyyy-MM-dd',

minDate:"1900-01-01",

maxDate:"2099-12-31",

mmStep:1,

ssStep:1,

openChange:false           注:给Datepicker 对象定义openChange,并默认为false

}, opts);


OK,思路就是在时间控件上加一个openChange值,当该值为true的时候,在选择完时间,触发closeCalendar()的时候,激活该input的change方法,


测试代码:

//将值传递给主页面

    function onchangeValue(obj){

    var name=obj.name;

    var value=obj.value;

    alert(value);

    $('#pagerForm').find('input[name='+name+']').val(value);

    }


测试结果:


转载:http://hi.baidu.com/syq17496152/item/a2e5091c4d15a56a70d5e836

这份DWZ代码是我个人一直使用的,DWZ对各版本IE的兼容性是比较好的,我的代码在IE6下也基本能正常使用,这是一直舍不得换其它框架的主要原因。 压缩包是完整的jfinal+dwz的测试性小代码,直接导入myeclipse,运行DwzConfig.java,访问http://localhost:8888/admin就可以进入页面。 代码例子是JAVA的,dwz,ztree等是前台的东西,和后台没有关系。不管.net还是php都通用,请根据使用的平台,修改发布WebRoot下的文件,修改admin.jsp就可以。 页面集成了ztree3.3,kindeditor,My97DatePicker的使用例子。 本代码解决了DWZ集成ztree时,对于未展开的菜单点击后target无效的问题。以下是使用例子: var zNodes =[ { id:1, pId:0, name:"菜单管理(不响应点击)", url:"#",open:false}, { id:2, pId:1, name:"菜单2(响应点击)", url:"articleAddEdit.html", target:"navTab", rel:"articleAddEdit2",open:false}, { id:3, pId:2, name:"菜单3(不响应点击)", url:"#", target:"navTab", rel:"articleAddEdit3",open:false}, { id:4, pId:3, name:"文章管理4", url:"articleAddEdit.html", target:"navTab", rel:"articleAddEdit4"}, { id:4, pId:3, name:"弹出层", url:"articleAddEdit.html", target:"dialog", rel:"articleAddEdit5",mask:true,width:860,height:600}, { id:4, pId:3, name:"文章管理6", url:"articleAddEdit.html", target:"navTab", rel:"articleAddEdit6"} ]; $(document).ready(function(){ $.fn.zTree.init($("#treeDemo"), setting, zNodes); }); 如果要菜单不响应点击事件,请设置url:"#" 此代码处理了弹出层刷新及弹出层分页问题,这部分没有提供例子。 别怪我分数这么贵,真心的自己花了时间去测试改进,希望帮助到更多朋友。 有问题或建议请写评论或发信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值