webkit "name" 陷阱
我在处理一个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" 或者放到另外一个名字空间中