アプリ版:「スタンプのみでお礼する」機能のリリースについて

<input type="file">でアップロードファイルを選択後、自動で新しい<input type="file">のボックスが表示されるような仕組みを作れますか?

onclick()のようなイベント取得方法で、ファイルが選択されたというようなイベントなどがありますでしょうか?

ファイルを連続で選択し、それらをまとめてアップロードする必要があります。

A 回答 (3件)

追加するより、隠しておいて見せるほうがなにかと楽ですね



<script>
function view(obj){
var f=obj.form;
for(var i=0;i<f.length;i++){
if(f[i]==obj){
for(var j=i+1;j<f.length;j++){
if(f[j].type=="file"){
f[j].style.display="";
break;
}
}
break;
}
}
}
</script>
<form>
<input type="file" onchange="view(this)">
<input type="file" onchange="view(this)" style="display:none">
<input type="file" onchange="view(this)" style="display:none">
<input type="file" onchange="view(this)" style="display:none">
</form>

ファイルを連続して選択するのは、セキュリティ的にムリだと思います

この回答への補足

onchange試してみます。

<input type="file"の数は限定できないと思います。

動的に追加することはできないでしょうか?

補足日時:2009/08/16 05:16
    • good
    • 0

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title></title>
<script type="text/javascript">
//@cc_on

var XXX = 'xxxFile';

function changeHandler( evt ) {
 if( RegExp( XXX ).test( this.name ) ) {
  increasedXXX( this );
 }
}

function increasedXXX( e ) {
 var c = e.cloneNode( false );

 c.value = '';
 e./*@if(1) setAttribute( 'onchange', '' ) @else@*/ removeAttribute( 'onchange' ) /*@end@*/;
 e.parentNode.appendChild( document.createElement( 'BR' ) );
 e.parentNode.appendChild( c );
}
</script>

</head>
<body>
<form action="receiver.php" enctype="multipart/form-data" method="post">
 <p><input type="file" name="xxxFile[]" value="" onchange="changeHandler.call( this, event );"></p>
 <p><input type="submit" value="送信"></p>
</from>
</body>
</html>

# 全角でインデントが入れてあるので、半角に変換してください。
# XXX は適当な文字に変換してください。
# 複数ファイルの受け取り方は以前示した参照先にあります。
    • good
    • 0

>ファイルを連続して選択するのは、セキュリティ的にムリだと思います



そんな話は初耳ですが、参照元を教えていただけないでしょうか。

一応 PHPの話ですが、
cf. http://jp.php.net/manual/ja/feature-fileupload.m …

あらかじめ用意しておくと処理の上でも楽だし、スクリプト切っても複数選択できるので、良い案だとはおもいますが、display : none を指定してしまっているので、その利点が台無しになってしまっています。

いい加減、elements 使えよと、

<input type="text" name="length" onchange="alert( this.form['length'] );"> ?

<input type="text" name="action" onchange="alert( this.form['action'] );"> ?

それから、
ele.style.display="";

は、CSS で display : ; と値無しでと指定してるのと同じなので、構文的に間違っています。どうにもならないときは仕方ないですが、メジャーなブラウザ(IE以外)では、removeProperty があるので、プロパティを消したいときは普通はそれを使います。

name なしで、どうやって受け取るんだろ、とか、(これが厄介だったりする)なんで、for でまわしたがるんだろとか、

時間ができたらサンプル書くのでちょっと待ったってください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!