关于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 掉。