Firefox获取隐藏表单元素的parent节点的Bug

发表于:2014-11-07 13:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Frenzy    来源:51Testing软件测试网采编

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,可能比较难改,简单说就是点击旁边后,选择框不会关..选择时候的鼠标状态问题,火狐好像不会变选择手势呢
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号