0

私はこのjavascriptを使用して、アップロード時にファイルタイプの拡張子を制限しています。

function TestFileType( fileName, fileTypes ) {
if (!fileName) return;

dots = fileName.split(".")
//get the part AFTER the LAST period.
fileType = "." + dots[dots.length-1];

return (fileTypes.join(".").indexOf(fileType) != -1) ?
alert('Correct File Type Function Here') :
alert('Wrong File Type Function Here');
}

<input name="replay_file" id="replay_file" type="file"/> 
<input type="submit" id="upload_file" value="Upload" name="uploadReplay" onClick="TestFileType(this.form.replay_file.value, ['w3g','.w3g']);" />

警告(間違ったファイルタイプ)してからページをリロードしたいのですが(時間を無駄にするのではなくアップロードをキャンセルするため)、これまでのところ、alrertボックスを機能させることはできますが、その後のページリロード機能は機能しません。ページのリロードが機能しません。gotourlとwindowslocationを試しても機能しません。アラートボックスの後、ファイルのアップロードを続行します。

return (fileTypes.join(".").indexOf(fileType) != -1) ?
null() :
alert('Warcraft III replay file (.w3g) allowed only!');window.location.reload();
}

私は何かが足りないのですか、それともファイルのアップロードに関してはこのように機能しませんか?

4

2 に答える 2

1

onsubmit次のように、拡張子が正しくない場合は、イベントを使用してフォームをキャンセルします。

function TestFileType( fileName, fileTypes ) {
if (!fileName) return;

dots = fileName.split(".")
//get the part AFTER the LAST period.
fileType = "." + dots[dots.length-1];

if (fileTypes.join(".").indexOf(fileType) != -1) {
   //alert('Correct File Type Function Here');
   return true;
} else {
   alert('Wrong File Type Function Here');
   return false;
}
}

onsubmitフォーム要素に接続されたイベントを使用して:

<form onsubmit="return TestFileType(this.form.replay_file.value, ['w3g','.w3g']);" ...
于 2012-11-06T22:50:33.777 に答える
1

ジェレミー、

この質問に対する回答はすでに受け入れられているようですが、投稿したコードの根本的な問題により、将来的に他の問題が発生する可能性があります。

初めに、

return (condition) ? alert('Correct') : alert('Wrong');

alertは、戻り値を持たないネイティブ関数です。何かを返すかのように扱うと、その何かは未定義になります。したがって、条件が何であっても、上記の行は常にundefinedを返します。私の説明が明確でない場合は、これを試してください:

alert(alert(Math.min(-3,5)));

第二に、

return (condition) ? null() : alert('msg'); window.location.reload();

nullは関数ではありません。これは、値が不明な定義済みオブジェクトを表す予約語です。

さらに、3値のif(b?x:y)は最初のセミコロンで終了するため、reload()は呼び出されません。

于 2012-11-07T10:01:39.813 に答える