ブラウザ入力をスクリプトで自動化 その2
以前に書いたid:murasuke:20051011に不具合が・・・
form内に同一のname属性がある場合を全く考慮していませんでした・・・orz
同一のname属性がある場合でもきちんと動く修正版ソースです
#<select>に対するfrm.all[tag.name].lengthの不思議な挙動にはまった・・・
scr.value = ""; var selNm = ""; var selIdx = 0; var aryIdx = ""; var nameHash = new Array(); dall = "all['"; var end = ";\r\n"; for( i = 0; i < par.document.forms.length; i++ ) { frm = par.document.forms[i]; for( j = 0; j < frm.all.length; j++ ) { tag = frm.all[j]; if( tag.type != undefined ) { if( frm.all[tag.name] != undefined && frm.all[tag.name].length >= 2 && frm.all[tag.name][0].type == tag.type ) // selectのname属性が1つの場合と2つの場合で動作が異なるので回避 { if( nameHash[tag.name] == undefined ) { nameHash[tag.name] = 0; } aryIdx = "[" + nameHash[tag.name] + "]"; nameHash[tag.name] += 1; } else { aryIdx = ""; } if( tag.type == "text" || tag.type == "textarea" ) { scr.value += dall + tag.name + "']" + aryIdx + ".value = '" + tag.value.replace(/\r\n/g, '\\r\\n') + "'" + end; } else if( tag.type == "checkbox" || tag.type == "radio" ) { scr.value += dall + tag.name + "']" + aryIdx + ".checked = " + tag.checked + end; } else if( tag.type == "select-one" || tag.type == "select-multiple" ) { selIdx = 0; selNm = tag.name; } } else { if( tag.tagName == "OPTION" ) { scr.value += dall + selNm + "']" + aryIdx + ".options[" + selIdx++ + "].selected = " + tag.selected + end; } } } }