• ベストアンサー

input type="file"のmaxlengthについて

こんにちは <input type="file">について、以下の点お教えください。 ソースで<input type="file" name="test" maxlength="10"> とした場合に、コピー&ペーストでは、例えば20byte文字列を貼り付けると10byteまでしかボックスには反映されないのですが、 その後直接手入力ができます。 また、ボタンからダイアログを起動してパスを指定した場合も、maxlength以上の桁数がセットされます。 ソースの書き方が悪いのでしょうか? それとも手入力文字数やダイアログからの桁数の制限をかけられないという仕様(HTML?IE?)なのでしょうか? また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、 パス内容がボックスに反映されないのですが、 これもまた仕様なのでしょうか? (ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども) ※私のマシンはWinXPでIE6のSP2を使用しています。 以上の点について、何か情報をお持ちの方は回答お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> (ファイル名の最長桁数が256byteだと思うと問題があるような気がするのですけども) 問題ありません。 何も送信しないだけです。 存在しないファイル名を指定しても何も送信されません。 MacOS Xでは500バイト以上のパスにすることが出来ます。 > あと、あまりにも長い文字を入れていくと、コピペをした際に値が表示されなくなったり、 > でもカーソルを移動させると突如文字が見えるようになったり、 > あまり見栄えのよろしくないことも発生します。 ブラウザ依存です。 特にMacでは、「ファイルを送信する(個人情報やセキュリティーに関係する)」ということを明確にするために、 CSSやタグ属性で見た目を変更したり隠したりすることに制限があります。 > 手入力だと入ってしまうので同期をとってほしいということでの対応なのです。 お客様理論への対応オツカレサマです(^^; ファイルフィールドは、javascriptから操作することは出来ません。 なので、onsubmitで<input>のvalueを取って、 一定の文字数(バイト数)以上だったらalert()とreturn falseするくらいだと思います。 WindowsIEのみかもしれませんが、 http://www.microsoft.com/japan/msdn/columns/webteam/webteam07022001.aspx#webteam07022001_topic1 ファイルフィールドをdisplay:noneで隠しておいて、 かわりにテキストフィールドとボタンでエミュレートする方法です。 テキストフィールドなら、スタイルシートやJavaScriptで操作出来ると思います。 該当のページでも解説がありますが、正確なファイル名を手入力してもファイルを送信出来ません。 ですからdisabledを指定して、手入力出来なくしています

参考URL:
http://www.microsoft.com/japan/msdn/columns/webteam/webteam07022001.aspx
16tukiya11
質問者

お礼

色々試していただけて感謝です。 ブラウザ依存ならブラウザ依存だと分かっただけでも、 対応無理です!と話ができるので大変助かりました。 今回とった対応とは異なりますが、 disabledを指定して手入力をなくすというのもよい手段ですね。 今後の参考にもなりました(^-^) ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

> また、ダイアログからパスを指定した場合、このパスが255byte以上(254byteはOK)だと、 > パス内容がボックスに反映されないのですが、 XP+IE7で確認しました。 Fxでは少なくとも265バイトまで可能ですのでOSのバグではなさそうですし、 仕様とは思えないので、ブラウザ(IE)のバグのようですね。 MacOS X + Fxは500バイト以上可能です。

16tukiya11
質問者

補足

皆様アドバイス等ありがとうございました。 他の方が同様の問題を抱えたときのために、 念のため私の方でとった対応を書くと、 OnBlur(※フォーカス喪失時に発生)を<input type="file">に入れて、 フォーカスが外れた場合に254byte以上の入力があった際は、 アラートを出して、フォーカスをセットしなおすことにしました。 <input type="file">はボックスと参照ボタンとで成り立っているオブジェクトなので、 OnBlurイベントはtabキーでボックスから参照ボタンにフォーカスを移動させたときに起きないのが難点といえば難点なのですが、 OKが出たのでそういう形にした次第です。

全文を見る
すると、全ての回答が全文表示されます。
  • MAN_MA_RUI
  • ベストアンサー率41% (426/1024)
回答No.3

通常の文字列であれば無限に長いものをサーバーへ渡さないために制限をかけることがありますけど、 ファイルパスの場合受け取るのはパスで指定されたデータそのものなので文字数を規制する意味はありません。 むしろ規制するならば選択するファイルの容量をどうにかしたほうが宜しいのでは?^^;

16tukiya11
質問者

お礼

アドバイスありがとうございました!

16tukiya11
質問者

補足

ダイアログから指定した場合は255バイト以上の長さになるパスは指定できないのに、 手入力だと入ってしまうので同期をとってほしいということでの対応なのです。 あと、あまりにも長い文字を入れていくと、コピペをした際に値が表示されなくなったり、 でもカーソルを移動させると突如文字が見えるようになったり、 あまり見栄えのよろしくないことも発生します。 そういうときにポストされたらどうなっちゃうのか、という問題もあるのです。 (そんな長い文字列をわざわざ入れる人もそうそういないとは思いますけどね ^_^;) ファイルサイズに関しては既に対応済みなので、 お気遣いありがとうございます(^-^)

全文を見る
すると、全ての回答が全文表示されます。
  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.2

W3Cでは text 及び password に使用する属性としてmaxlengthが挙げられています http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#adef-maxlength > HMTL関連のHPを見ると、maxlengthが指定できることになっているのです。 昔のブラウザではtype="file"であっても maxlength を指定した場合、 入力による文字数制限をかけることが可能でした (参照による場合は表示されてしまいますが、それ以上の直接入力は不可) 現在指定が出来ないのは、ブラウザのバージョンアップに伴い W3C標準にするための改善と考えられます

16tukiya11
質問者

お礼

W3Cのことを教えていただけて、とても助かりました! ありがとうございました(^-^)

16tukiya11
質問者

補足

アドバイスありがとうございます。 URL、参考にさせていただきました。 昔のブラウザだったら有効だったんですね。 参照のダイアログから表示させたときって、 そのパス長に制限とかありましたか? ご存知であれば教えていただきたく思いますm(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

fileの文字数をHTML側で制限する筋合いはないので、maxlengthなんて 指定できないのでは?そうなるとブラウザに依存するものだと推定できます。

16tukiya11
質問者

お礼

アドバイスありがとうございました!

16tukiya11
質問者

補足

HMTL関連のHPを見ると、maxlengthが指定できることになっているのです。 (http://www.tohoho-web.com/html/input.htm) なので、それが有効にならないのは何故だろう?というわけでして。 アドバイスありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • input type="file"の幅と高さ

    FireFox12で、ファイルを取り扱うフォーム部品のボックスの高さと幅が変更できません。 type属性がtextboxだとFireFoxでもCSSがちゃんと適用されます。 <input type="file" name="sample" class="test" /> .photo { width:580px; height:20px; } としていますが、IE8/9 Safari5.1.7/Chrom19では指定した幅と高さになるのですが FireFoxだけ変化しません。 どうしようもないのでしょうか?

    • ベストアンサー
    • CSS
  • input type="file" 参照内容のクリア

    「input type="file"」にて、参照ボタン押下後に設定される、 ボタン左のテキストボックスの内容をクリアする方法を探しています。 「input type="file"」項目の直接入力を許可していれば可能かと思いますが、 「OnKeyDown = "return false;"」を設定し、直接入力を禁止しております。 可能であれば、このまま項目の直接入力は禁止としておきたいと思います。 以上の内容で、どなたか解決の方法をご存知ないでしょうか? 何卒宜しくお願い致します。 仕様ブラウザ IE6・7

    • ベストアンサー
    • HTML
  • <input type="file" で初期値を設定したいのですが、

    <input type="file"....というボックスに初期の文字を設定したいのですが、 type="text"の時のようにValue="c:\a.txt"では設定できませんでした。 こういうことは不可能な仕様でしょうか? 何か方法があったら教えて頂きたいです。 よろしくおねがいいたします。

    • ベストアンサー
    • Java
  • <INPUT TYPE="file">に不正なパスを入力すると「アクセスが拒否・・・」とエラーが出る

    <INPUT TYPE="file">を利用して、アップロードのファイルを指定したいのですが、<INPUT TYPE="file">のテキストエリアに絶対パスではなく、適当なファイル名だけを入力してsubmitを行うと「アクセスが拒否されました」というエラーが出て困っています。 この現象はXPで再現しています。2000では再現しませんでした。 どなたかこの原因と回避作をご存知でしたらご指導お願いします。

  • [IE5.5]INPUT TYPE=FILEのREADONLYについて

    先週まで、IE5.0でHTMLを書いておりました。 今週なんとなくIE5.5 SP2にバージョンアップしました。 そしたら、以下の部分が動作しなくなってしまいました。 ----------------------------------- <INPUT TYPE="FILE" READONLY="true"> ----------------------------------- 前任者が作成したソースですので、記述に誤りがあるかもしれませんが、 IE4.0、IE5.0では何も問題なく動作しております。 しかしIE5.5だと、ファイル参照のボタンは表示されているのですが、 クリックしても何の反応もありません。 ちなみにREADONLY属性を取り除くと、ファイル選択ダイアログが表示されました。 しかし、ファイルを選択した後サーバへアップロードしており、 アップロードされたファイル名をデータベースに書き込む処理がありますので、 万が一、アップロード後にファイル名が書き換えられてしまうと、 サーバとデータベースとの整合が取れなくなってしまう為、 どうしても編集不可にしたいのです。 どなたかご存知の方が見えましたらご教授願います。 IE5.5では、<INPUT TYPE="FILE">にREADONLY属性は使えないのでしょうか? また、別の方法での対処方法などはないでしょうか?

  • input type="file"で複数選択を可能にする方法

    初めて利用させていただきます。初心者の為、できれば詳細なご回答いただけると嬉しいです。 早速ですが、<input type="file">の実行結果は、テキストエリアの横に【参照】ボタンがあるような状態になります。 このテキストエリアの部分に複数のファイルをどんどん選択して格納できる方法を探しております。 イメージとして、3行くらいがデフォルト表示のテキストエリアがあり、その横に【参照】と【削除】ボタンが上下に並び、 参照で選択したファイルがそのテキストエリアに格納されてゆき、3行を超えるとスクロールバーが表示される、 格納されたあるファイル名を反転させて【削除】選択で削除される、 というものを作りたいのです。 今回、クライアントの要望で添付ファイルは1000個まで選択可能という状態を実現しなくてはならず、<input type="file">を1000個並べる訳にもいかない為、とても困っております。 且つ、java script禁止令を出されています。 ファイル形式はjspですので、formのactionでサーバ側で処理を制御することは可能です。 念の為、私が探し出したソースで一番理想に近いものを併記致します。 <table>  <tr>   <td rowspan="2" nowrap><select name="File" size="3" multiple> <option value="">                         </select></td>   <td>   <iframe width="60" height="25" frameborder="no" scrolling="no" src="とあるexeファイルを指定"></iframe>   </td>   <td rowspan="2" valign="top" nowrap><font size="-1">「参照...」ボタンをクリックして<br>ファイルを指定してください。</font></td>  </tr>  <tr>   <td nowrap><input type="button" value=" 削除 " onClick="RemoveFile( this.form )"></td>  </tr> </table>

  • IE6でのダウンロードダイアログボックスがでない

    ホームページからCSVファイルをダウンロードさせていましたが、IE6のブラウザーを使うとブラウザー上にテキスト表示されてしまいます。IEの5や5.5は問題なくダイアログボックスが出てきて保管か表示か選べる様になっていました。IE6でもダイアログボックスを出したいのですがどのようにしたらよいでしょうか教えて下さい。 現在使用しているソースです。 <%@ LANGUAGE="VBScript" %> <% Response.Redirect(/xxx/xxx/file.csv) %> サーバーの仕様です OS   NT4.0 IIS  4.0 ASP  5.6

  • <input type="checkbox" checked> のチェックをはずさせないには?

    <input type="chekbox" checked> checkedで規定値でチェックをつけておくのですが、 そのチェックをはずさせたくありません。 disabled をつければよいような気がしますが、 IE4以上でしか有効でなかった気がします。 IE3.02でも動作する作りにしたいのです。 チェックボックスをクリックした時に、 クリックを無効にする方法か、 クリックしてチェックがはずれても またつけるようにする方法を教えて下さい。 Windows2000 IE3.02以上 使用言語 VBSCRIPT

    • ベストアンサー
    • HTML
  • インプットBox Type:=1で空白でOK選択

    エクセル2003です。 インプットBOXに数値を入力してもらいます。 整数で1文字以上~8文字以内にさせたいです。 (1)キャンセル選択 (2)間違った入力 (3)未入力でOKを選択 の場合記述してある再入力を促すMsgBoxを表示させたいです。 また(2)(3)はMsgBox表示の後インプットBox入力に戻したいです。 以下に掲載した構文で行うと (1)インプットBOXの「キャンセル」選択時 →「終了」MsgBox表示(正常) (2)数字以外を入力した時 →Type:=1にしてある為「数値が正しくありません」  と記述してあるMsgBoxではないが警告メッセージが表示(正常) ・9文字以上入力した場合 →「再入力」MsgBox表示(正常) ・1文字~8文字を入力した場合 →次の処理に進む(正常) (3)何も入力せず空白の状態でインプットBoxの「OK」を選択 →記述してあるMsgBoxではなく 「入力した数式は正しくありません」と書かれたヘルプ付き警告が 表示されてしまいます。  この時は上記同様に記述内にある 再入力を促すMsgBox を表示させたいのですがどう記述すればいいのか分かりません。 インプットBoxのType:=1をはずせば 記述してあるMsgBoxが表示するようになりますが 今度は整数以外が入力できてしまいます。 よろしくお願いします。 Do 指示数 = Application.InputBox("指示数を数字で入力してください ", Type:=1) If 指示数 = "False" Then 'キャンセル選択時 MsgBox "終了します", vbExclamation, "注意" Call 定位置  Exit Sub  End If '1文字以上8文字以内の時はループを抜けて次の処理へ If Len(指示数) <= 8 Then Exit Do 'Loopを抜けて次の処理へ End If MsgBox "ケタ数が違います。再入力してください", vbCritical, "エラー!!" Loop 'インプットBoxに戻る ---次の処理

  • inputタグのtype値がfileの場合にデフォルト値を表示させたい

    フォームの中にデフォルト値を入れたい場合は、例えば  <input type="text" name="id" id="id" value="A25" /> のように、inputタグの中のvalue値を指定すれば良いわけですが、type値がfileの場合、  <input type="file" name="photo" id="photo" value="flower.jpg" /> のようにしても、フォームは空白のままです。 どうにかして、この場合でもデフォルト値が表示するように出来ないものでしょうか?

    • ベストアンサー
    • HTML
このQ&Aのポイント
  • 26歳女性の登山愛好者が、知らない人から体型に関する陰口を受けることに悩んでいます。身長163センチ、体重40キロの彼女は健康診断も正常であり、ザックの重さも適切です。しかし、登山中に「あの子山やってるよ、、」と後ろから言われることが多いそうです。彼女は体型が細く食べても体重が増えず、身長だけが伸びているタイプです。彼女は体型による差別や偏見に悩んでおり、このような人々の意見を気にしない方法を知りたいと思っています。
  • 体型による批判は、おじさんやおばさんを含めてさまざまな人から受ける可能性があります。彼らは体型を見て判断して言っているのかもしれませんが、それは彼女自身の問題ではありません。彼女は健康であり、ザックの重さも適切です。体型が細いからといって山に登ることができないわけではありません。
  • このような人々の意見に気に病む必要はありません。彼女は自分の好きなことを楽しむ権利があります。他人の意見にとらわれず、自信を持って行動することが大切です。彼女は体型に関する陰口を気にすることなく、自身の登山愛好を堂々と楽しんでください。
回答を見る

専門家に質問してみよう