ボタンがサイトの残りのボタンと一致するように、HTML フォームのファイル入力の外観をカスタマイズする方法を見つけようとしています。ここを見回すと、うまくいくと思われる解決策が見つかりましたが、奇妙な動作をしています。
ファイル入力を取得して display:none を設定し、フォーム内に新しいテキスト入力とボタンを作成しました。
<form method="post" action="../Entry/Create" enctype="multipart/form-data" onsubmit="return aentryValidate()">
<input type="text" id="EntryTitle" name="EntryTitle" maxlength="50" />
<div id="invalidTitle" class="invalidData"></div>
<p id="char-remaining">(50 characters remaining)</p>
<input type="file" id="ImageFile" name="ImageFile" style="display:none;" />
<input type="text" id="ImageFileMask" name="ImageFileMask" disabled="true" />
<button type="button" onclick="HandleFileButtonClick()" id="ImageFileButton" style="margin-left:10px;padding-bottom:0px;height:20px;width:100px;font-size:14px;">browse...</button>
<div id="invalidImage" class="invalidData"></div>
<p id="file-desc">(image to represent your entry, jpg, png, or gif)</p>
<textarea id="EntryDesc" name="EntryDesc"></textarea>
<div id="invalidDesc" class="invalidData"></div>
<br />
<input type="checkbox" id="isPrivate" name="isPrivate" value="true" />
<input type="hidden" name="isPrivate" value="false" />
Make my entry private.
<button id="new-entry-save">save</button>
</form>
次に、クリックされている ImageFileButton ボタンを処理するための私の JavaScript:
function HandleFileButtonClick() {
document.getElementById("ImageFile").click();
document.getElementById("ImageFileMask").value = document.getElementById("ImageFile").value;
}
うまく機能しているようです。ボタンをクリックすると、ファイルを選択するためのウィンドウがポップアップ表示されます。ファイルを選択すると、テキスト ボックスに表示されます。
フォームの保存ボタンを押すと、奇妙な動作が発生します。何らかの理由で、実際に送信するには 2 回クリックする必要があることに気付きました。そして、送信すると、ファイルが投稿されなくなります。
そこで、ファイル入力を再び表示して、何が起こっているのかを確認しました。ImageFileButton ボタンを使用してファイルを選択すると、そのファイルがファイル入力に表示されます。しかし、保存をクリックすると、ファイル入力がクリアされ、フォームは送信されません。その後、もう一度クリックして送信する必要がありますが、もちろんファイルはありません。
ここで何が起こっているか知っている人はいますか?