mark下工作中JS的小问题
如图:
单选框是6天,文本框最多是1-15的正整数,而且单选框的值要和文本框对应,当文本框大于等于7时,单选框的check都为false;
而编辑器是根据天数来生成的,譬如选5天,就生成5个编辑器,代码如下:
1 //根据天数实例化UEditor 2 function getDaysDetail(num){ 3 for(var i=1;i<=num;i++) 4 { 5 var editor = new UE.ui.Editor(); 6 UE.getEditor('tuan_schedule_'+i, { 7 maxImageSideLength:477 //宽度超过477px将自动等比缩至宽477px 8 ,imagePath:"" 9 }); 10 } 11 }
调用getDaysDetail()代码如下:
1 var daysRadio=$('#selectDays').find('input[name="schedule_day"]:radio'); 2 var daysTxt=$('#selectDays').find('input[name="schedule_day_other"]'); 3 var days=$('#selectDays').find('input[name="schedule_day"]:radio:checked').val() 4 5 //判断函数是否存在 6 if(typeof getDaysDetail==undefined) return; 7 8 daysTxt.val(days); 9 getDaysDetail(days); 10 11 daysRadio.click(function(){ 12 days=$('#selectDays').find('input[name="schedule_day"]:radio:checked').val(); 13 getDaysDetail(days); 14 daysTxt.val(days); 15 }); 16 17 daysTxt.mouseenter(function(){ 18 $(this).focus(); 19 $(this).select(); 20 }) 21 22 //判断是否为正整数 1~15 23 function isUnsignedInteger(a) 24 { 25 var reg =/^[1-9][0-5]?$/; 26 return reg.test(a); 27 } 28 29 daysTxt.keyup(function() 30 { 31 days=parseInt($(this).val()); 32 if(isUnsignedInteger(days)){ 33 if(days>=1 && days<=15) 34 { 35 36 if(days>=1 && days<=6) 37 { 38 $('#selectDays').find('input[name="schedule_day"]:radio[value='+days+']').attr('checked',true); 39 } 40 else 41 { 42 daysRadio.each(function(i){ 43 $(this).attr('checked', false); 44 }) 45 } 46 getDaysDetail(days); 47 } 48 else 49 { 50 daysTxt.val(1); 51 $('#selectDays').find('input[name="schedule_day"]:radio[value=1]').attr('checked',true); 52 return false 53 } 54 } 55 else 56 { 57 daysTxt.val(1); 58 $('#selectDays').find('input[name="schedule_day"]:radio[value=1]').attr('checked',true); 59 return false 60 } 61 });
前段时间跑没什么问题,后来同事反映说当>=7时,无法调用getDaysDetail() 这个函数;用了几分钟check下代码,发现第3行代码出的问题:
var days=$('#selectDays').find('input[name="schedule_day"]:radio:checked').val()
days只算了radio的值;
而第9行getDaysDetail(days) 是只算的radio的值,没有传input=text的值,这样当然>=7时,就不能调用getDaysDetail() 函数了;
只需小改一下:
var days=$('#selectDays').find('input[name="schedule_day"]:radio:checked').val()||daysTxt.val();
就OK了。
看来工作中还是有些边缘问题没考虑到,mark于此,以后谨记于心。