日期:2014-05-16  浏览次数:20355 次

关于firefox和Chrome中form对象的elements属性
本帖最后由 shangqiu2012cs 于 2014-01-22 15:26:17 编辑

Firefox和Chrome中form对象的elements只能以下面这种方式来访问:
    objform.elements['objid']
但是在IE中除了上面这种方式,还可以
    objform.elements('objid')

   现在已有的代码原来是基于IE写的,很多objform.elements('objid')这种东西,想要在Firefox和Chrome下兼容,需要作修改
   可是一个个的改,工作量稍微有点多,于是想到elements后面接括号来访问,那不就相当于是一个函数了,那我只要在公共js文件里面给HTMLFormElement元素加一个elements函数,问题不就很简单的解决了?
   于是加了下面这段代码:
   HTMLFormElement.prototype.elements = function(objid)
   {
 return this.elements[objid];
   }
本以为,这样是没有问题的,唉...
可惜试了下,在Chrome和Firefox下还是会报错说elements不是函数....
  又改成下面这样:
  function f(objid)
  {
    this.objid;
  }
  HTMLFormElement.prototype.__defineGetter__("elements", function(objid)
 {
      return f;
 }
 这样还是不行啊!!!
难道真要一个个改呀 ,我去.
有没有大神知道怎么把elements弄成form对象的方法呢?

   


------解决方案--------------------
本帖最后由 showbo 于 2014-01-22 15:31:06 编辑
。。。楼主还真是会偷懒。。都知道不标准了还一错再错下去

elements是改写不了的,你用调试工具输出对象elements属性就知道了,是HTMLCollection,并不是你的方法


用dw搜索,启用正则,搜索“.elements\(([^\)]+)\)”,替换为.elements[$1]

------解决方案--------------------
function A(){

}
A.prototype.a='wen';
A.prototype.a=function(){

};

后面覆盖前面;

function B(){

}
B.a = 'wen';
B.prototype.a=function(){

}

按照链访问顺序,只要B.a存在,永远都轮不到B.prototype.a。
要用B.prototype.a,你就先把B.a delete 掉。