2008年11月25日

Rails2.1.2(actionpack-2.1.2)のバグ?

submit_tagのオプションでダブルクリック防止のための":disable_with"がありますが、このオプションを付けた時に出力されるJavascriptがIE(6と7で確認)でエラーになってしまいます。(ただしFireFox3では大丈夫)

実際に出力されるスクリプトは↓なのですが、


<input name="commit" onclick="
if (window.hiddenCommit) {
window.hiddenCommit.setAttribute('value', this.value);
}
else {
hiddenCommit = this.cloneNode(false);
hiddenCommit.setAttribute('type', 'hidden');
this.form.appendChild(hiddenCommit);
}
this.setAttribute('originalValue', this.value);
this.disabled = true;
this.value='検索処理中...';
result = (this.form.onsubmit ? (this.form.onsubmit() ? this.form.submit() : false) : this.form.submit());
if (result == false) {
this.value = this.getAttribute('originalValue');
this.disabled = false;
}
return result;"
type="submit" value="検索" />

この中で、

hiddenCommit.setAttribute('type', 'hidden');

がエラーになります。

で、W3CのDOM Level1仕様
http://www.w3.org/TR/REC-DOM-Level-1/level-one-html.html#ID-798055546
の「Interface HTMLInputElement」を見ると、type属性はreadonlyなんですよね。

ということはFireFox3で動作しているのがたまたまで、本来のDOM仕様的には動作しない方(IEのエラー)が正しいということでしょうか?

":disable_with"オプション付与時の処理は、
actionpack-2.0.2 → actionpack-2.1.1 → actionpack-2.1.2
で、改造されてきているようですが、この問題の処理が組み込まれたのはactionpack-2.1.2からでした。

#該当ファイルは、
#actionpack-2.x.x\lib\action_view\helpers\form_tag_helper.rb

ともあれ、IEでの動作確認を全くしないで組み込んでいるとしか思えないですね。「がっくし」しちゃいます・・・
posted by 台北猫々 at 21:48| Comment(0) | TrackBack(0) | 技術メモ(Ruby)