|
FirefoxもこれでOK。かなり無茶してるけど。
フォーカスをタブ移動すると、どこにもあたらない瞬間があるでしょう。
たぶん、FileUpload の テキストBOXにフォーカスが当たっていますね。
まぁ、おそらくこれ以上は無理かと。
Firefox3.0
ChromeΒ
IE7
とりあえず、見た目まぁまぁ、挙動ほぼ同じ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>
<BODY>
<script>
function fileDlgIE_GC(me, fileName, selectName, click) {
if (navigator.userAgent.indexOf("MSIE") > -1)
fileDlgIE(me, fileName, selectName);
else
fileDlgGC_FF(me, fileName, selectName, true);
}
function fileDlgIE(me, fileName, selectName) {
//IE は click でとまるから簡単。
me.form[selectName].click();
me.form[fileName].value = me.form[selectName].value;
}
var timer = null;
function fileDlgGC_FF(me, fileName, selectName, click) {
//Chrome と Firefox は止まらないのでタイマー監視
//選択結果が同じだと延々回ってしまうけど、まぁ。。。
if (timer != null) clearTimeout(timer);
timer = null;
timer = setTimeout(function(ofn, ofs) {
return function() {
if (ofn.value != ofs.value) {
ofn.value = ofs.value;
timer = null;
}
else {
timer = setTimeout(arguments.callee, 500);
}
}
}(me.form[fileName], me.form[selectName]), 500);
//Chrome は click() で止まらず。
//Firefox は、いんちきくさいやり方で対処。
if (click)
me.form[selectName].click();
}
function delayClick() {
setTimeout(function() {
document.forms[0].upload2.click();
},500);
}
</script>
<form>
FileName:<input type=text size=80 name="fileName" />
<input type=button value="..." onclick="fileDlgIE_GC(this, 'fileName', 'upload', true)" />
<table border width=400px style="position:absolute;z-index:2;left:-100px; top:-100px;">
<tr><td>
<input type=file name=upload />
</td></tr>
</table>
<hr />
<div style="position:relative;width:500px;margin:0px;border:solid 1px red;height:24px;">
<div style="position:absolute;left:0;top:0;z-index:2;">
<input type=text style="width:440px;background-color:pink" name="fileName2" />
</div>
<div style="position:absolute;right:0;top:0;z-index:1;">
<input type=file name=upload3 onclick="fileDlgGC_FF(this, 'fileName2', 'upload3', false)" />
</div>
</div>
<input type=button value="FF" onclick="alert(this.form.upload3.value)" />
</form>
</BODY>
</HTML>
|