webkit "name" 陷阱

分类-Web 琐事 十二月 13, 2010 10:28 360 Views 4 Comments
标签:

我在处理一个form有很多可排序的字段时,都是将input.name 属性设置为 model-field-id 这样的格式,然后在拖放排序后动态的改变_id

于是用这样的写法:

$("input.item").each(function(index, input){

    name = input.name ;

    name = name.split('-');

    name.pop();

    name.push(new_id);

    input.name = name.join("-")

});

 

这样的代码在IE/Firefox上没有任何问题,但是到了Chrome/Safari上就出现另外问题

到Chrome的Developer Tool里面 输入"na" 发现自动补全出现了 "name" 原来 name 是全局变量

查下 window 对象确实有个name属性

 

看下报的错是“Object model,field,id has no method 'pop' "

再输出下name的值,本来是个列表却成为字符串了,难道相当于调用了

["model", "filed", "id"].join(",")

难道赋给name(window.name)的值都会被webkit 自动转换成字符串?

是我又给name赋值了几个对象的类型发现都自动转换成字符串了

 

总结了以下规律:

 

如果复制给name的对象有toString() 就会使用此函数返回值作为name的值,如果没有此值将会打印"对象的名字", 我不清楚这个"对象的名字"是怎么来的,不过如果是用Python的话就可以这样说:

首先调用的 __str__函数,如果没有则使用 __repr__

 

所以在给变量命名时最好不用 "name" 或者放到另外一个名字空间中

COMMENTS | 评论

自言自语  --  发表新文章 管理

Powered by pLite :)  由 Google AppEngine 强力驱动