続き。
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行分だけ残す