首页 > 代码库 > [13年迁移]firefox获取隐藏表单元素的parent节点的bug
[13年迁移]firefox获取隐藏表单元素的parent节点的bug
getXY : function(element){
var y = element.offsetTop;
var x = element.offsetLeft;
while(element = element.offsetParent){
y += element.offsetTop;
x += element.offsetLeft;
}
return (new Array(x,y));
}
貌似是这个问题,递归代码在火狐下好像有问题,要打桩测一下(不打桩了,有log输出就容易了)
getXY : function(element){
var y = element.offsetTop;
var x = element.offsetLeft;
var i=0;
while(element = element.offsetParent){
y += element.offsetTop;
x += element.offsetLeft;
i++;
}
//firefox debug
console.log(i);
console.log(y);
console.log(x);
return (new Array(x,y));
}
在ie9下为4 120 100,正常
火狐为0 0 0,看来只要换个递归的写法就行了,
但是这个问题的原因要查清楚,项目里有这种风格写法的人,可能对于火狐的解析器来说
while(element = element.offsetParent)估计一开始就等于false啊..具体测试下
具体文章javascript的互等性,要补一下了.
火狐下element.offsetParent一开始就等于null
还是要去打桩,bug无法确定了,有可能是递归写法问题,又可能是前面传的element对象不对
还是不用打桩,调试时的一个报错,说明火狐解析器对判断条件里的element = element.offsetParent的理解是正确的.
前面的传参不对,or火狐对offsetParent的属性理解不对(如果加悬浮布局,那么火狐下是直接父节点直接对应body的,然后当然是null,记得是),没有使用危险的css属性,应该不会有问题的啊,
getXY : function(element){
var y = element.offsetTop;
var x = element.offsetLeft;
var i=0;
if(!element.offsetParent)
console.log("null");
console.log(element.id);
while(element = element.offsetParent){
y += element.offsetTop;
x += element.offsetLeft;
i++;
}
//firefox debug
console.log(i);
console.log(y);
console.log(x);
return (new Array(x,y));
}
传参正确,获得的id和在ie下一样,不过应该没有并没有该id对应的对象在页面中存在,不过ie能理解,这个火狐也是认得,但是貌似这个parent对象火狐处理得和ie不同(直接为空,ie正常)
差点以为有又有什么我不知道的写法,xx_xx什么的可以直接一起获取,当然不可能啊,草,怪怪的语言,随时提心吊胆的
是获取一个隐藏的input对象的父节点问题,导致常用的递归获取元素绝对坐标方法的递归失败.在firefox下,隐藏表单字段估计直接对应body节点(猜的),那么就是为空(或者直接就是对象属性封装的问题,反正是bug),估计就是这个问题了,稍微修改后BUG被clear(在getXY里用固有结构,把对象指向日期框后解决)
offsetParent这个属性是个level0的属性,实现各异
而jq中的>可以跳来跳去,会不会也有这个bug呢?还是jq处理了这个BUG,等有时间再去测试吧
接下来就是一些css问题,和修复原控件的select的fous问题,还是尽量不要用input这玩意在ie6下并不好,xinput控件调用又太麻烦了
基于先前研究,进销存模块使用的透明图片加div颜色属性实现的皮肤效果,可以进行日期控件在保证其他位置引用兼容性的前提下,进行和进销存模块独有的表单皮肤系统整合
在前辈的指导下修改了getYear(),getFullYear(),火狐是不支持 getYear()的,一开始我还以为那个控件一直是从Const里获得年月日的,其实是外部调用时传个date()对象?有时又在控件里建date()对象,当初可能是想做什么吧,中途可能放弃了,那Const里那个年月日是干嘛的,要好好看看去
发现火狐失去焦点事件的bug,可能比较难改,简单说就是点击旁边后,选择框不会关..选择时候的鼠标状态问题,火狐好像不会变选择手势呢
[13年迁移]firefox获取隐藏表单元素的parent节点的bug