続き。
element.name= が使えないのは IE のバグ?らしい。 @ITのフォーラム。
で、
document.createElement('<input name="group_ids[' + this.groupId + ']">');
とやると、確かに IE では動くようになる。 けど、Firefox ではこんなエラーに。
Error: uncaught exception: [Exception... "String contains an invalid character" code: "5" nsresult: "0x80530005 (NS_ERROR_DOM_INVALID_CHARACTER_ERR)" location: "http://127.0.0.1:3000/javascripts/application.js Line: 35"]
しかたないので、
createInputTagWithName: function(groupId){
return Try.these(
function(){
return document.createElement('<input name="group_ids[' + groupId + ']">');
},
function(){
var input = document.createElement("input");
input.name = "group_ids[" + groupId +"]";
return input;
}
);
}
みたいなことに。で、今度は label タグの for をセットしようとすると、 IE だと label["for"] = checkbox.id; でいけるのに、Firefox だとセットされない。 なもんで、label.setAttribute("for", checkbox.id); で回避。ならばと、 name も setAttribute() *1しようとしたけど、 IE ではやっぱりダメ。まぁチグハグだけど両方で動くようになったからよしとするか。
べた書きの部分は、もう少しなんとかしないと。あと、別のブラウザでも試してみたいな。
*1 これってどこで定義されてるの?
動くんだ、これ。ふつうにやると、 トップレベル?で document とかを参照してるところでエラーが出るけど、 そこ以降をばっさり削除*1すれば、 コアを extend とかしてる部分は(全部じゃないけど)動く。 カレントディレクトリに prototype.js を置いて、
$ smjs
js> load("prototype.js")
js> var a = $A([1,2,3,4,5,6,7,8,9,10])
js> a.inspect()
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
js> a.map(function(i){return i*i}).inspect()
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
js> var sum = a.inject(0, function(r,i){return r + i})
js> print(sum)
55
findAll とか sortBy には違和感あるけど。それが javascript。
js> "foo".camelize() foo
あれ?とか言わないように。
js> "foo-bar".camelize() fooBar
ですよ(区切りは - なのか)。$H()とか$R()も動く。
js> var h = $H({key1:"value1",key2:"value2"})
js> h.inspect()
#<Hash:{key1: value1, key2: value2}>
js> var r = $R(3,12,true)
js> r.inspect()
#<Enumerable:[3, 4, 5, 6, 7, 8, 9, 10, 11]>
$R()のinspect()は、.. とか ... とかを使って表示するようにした方がよさげ。
js> Object.extend(ObjectRange.prototype, {
inspect: function(){
var op = ".." + (this.exclusive ? "." : "");
return "#<Range:" + this.start + op + this.end + ">";
}})
[object Object]
js> var r = $R(3,12,true)
js> r.inspect()
#<Range:3...12>
js> var r = $R(3,12,false)
js> r.inspect()
#<Range:3..12>
とりあえずは、function と return だらけだけど、結構刺激的なコードですね。 連休中に読む。
*1 1.5.0pre1 の先頭883行分だけ残す