在laydate5.0.3中,使用类选择器,批量初始化日期监听时,会出现:点击第一个input控件,可以正常选择日期,点击第二个及之后的input时,日期控件会闪一下,然后被移除掉。
初始化代码:
laydate.render({ elem:".date" });
问题原因:
//绑定关闭控件事件 lay(document).on('click', function(e){ if(e.target === options.elem[0] || e.target === options.eventElem[0] || e.target === lay(options.closeStop)[0]){ return; } that.remove(); }).on('keydown', function(e){ if(e.keyCode === 13){ if(lay('#'+ that.elemID)[0] && that.elemID === Class.thisElem){ e.preventDefault(); lay(that.footer).find(ELEM_CONFIRM)[0].click(); } } });
if语句里,只判断当前触发的点是否跟初始化时的控件列表里的第一个比较是否相等,在使用id初始化控件时,没问题,因为只有一个,但当使用类作为选择器初始化时,就会出现第二个及以后的控件有问题
解决办法:
//绑定关闭控件事件 lay(document).on('click', function(e){ if(selectElemIsInElems(e.target, options.elem) || e.target === options.eventElem[0] || e.target === lay(options.closeStop)[0]){ return; } that.remove(); }).on('keydown', function(e){ if(e.keyCode === 13){ if(lay('#'+ that.elemID)[0] && that.elemID === Class.thisElem){ e.preventDefault(); lay(that.footer).find(ELEM_CONFIRM)[0].click(); } } });
//检查当前元素是否在元素列表里 function selectElemIsInElems(elem, elems){ var flag = false; for(var i=0;i < elems.length;i++ ){ if(elem === elems[i]){ flag = true; return true; } } return flag; }
这样,就OK了