javascriptでformをname属性でアクセスする手法は良く使う。
var abc = document.formname.hoge.value;
これを、動的に生成させたformで行おうと思った場合、IEで問題が起こる。
var myNode = document.getElementById('fuga');
var myForm = document.createElement('form');
myForm.name = 'formname';
var myInput = document.createElement('input');
myInput.name = 'hoge';
myInput.type = 'text';
myInput.size = "40";
myForm.appendChild(myInput);
myNode.appendChild(myForm);
dom生成時に.nameでname属性を変更しているにもかかわらず、IEでは独自のIDがつけられてしまい、上記のname属性を利用したアクセス方法ではアクセスできないのだ!
有り得ないよ。
そこで、こんなユーティリティ関数が必要になる。
function createNamedElement(tag,name){
var isIE =/*@cc_on!@*/false;
var element;
if (name) {
element = (isIE)? document.createElement('<' + tag + ' name="' + name + '">'): document.createElement(tag);
element.name = name;
} else {
element = document.createElement(tag);
}
return element;
}
IE恐るべし。
ちなみに’cc_on’の所は、IEの判定で良く使われる方法(らしい)。
この記事のタグ名’bug_or_spec’のネーミングセンスの良さに自画自賛
ツイート