2009-02-26 16 views
8

IEのファイル入力テキストボックスにユーザーが入力しないようにすることはできますか?私が尋ねる理由は、ユーザーがファイルシステムパスのように見えないテキストを入力した場合(たとえば、c:...のようなもので始まらないなど)、ユーザーが「送信」ボタンをクリックすると何も起こりません。IEのファイル入力テキストボックスを無効にする方法は?

私は、ユーザーがボックスに入力することも、通常通りにフォームを送信することもできないようにしたいと思います。

私は同じ質問が応答なしでここに頼まれたことを発見した: http://www.webmasterworld.com/html/3290988.htm

そして、この人は他の適切な答えは存在しない場合、私は使用することができますハックを思い付いた: http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

編集:明確にするために - ユーザーが "ブラウズ"ボタンの隣にあるテキストボックスに "ファイルパスではない"と入力して送信をクリックすると、IEでは何も起こりません。フォームは送信されません - <入力タイプ= "ファイル" >ボックスに実際のファイルパスがない場合、IEはフォームの送信を許可しません。いや、実際には、同様に提出を防ぐ...しかし、HTML 4で明らかに

<input ... readonly> 

が動作するはずです:

答えて

2

これは、送信前にボタンを使用し、送信前にJavaScriptを使用して値を確認する別の方法でこれを解決しました。

<input type="file" name="inputFile"> 
<input type="button" onclick="if(fileHasValidPath()) { submitForm(); }" value="Submit"> 

function fileHasValidPath() { 
    if (isIE()) { 
    var inputFile = document.forms[0].inputFile; 
    if (inputFile.value != "" && /^(\w:)|(\\)/.test(inputFile.value)) { 
     alert("File is not a valid file. Please use the Browse button to select a file."); 
     inputFile.select(); 
     inputFile.focus(); 
     return false; 
    } 
    } 

    return true; 
} 

function submitForm() { 
    document.forms[0].submit(); 
} 

私はまだそこにファイルをサーバー側で検証する必要がありますが、これはユーザーのみ送信ボタンをクリックすると起こって何かを見ていないのを防止することである実現。また、Windows OSを使用してIEを想定しています。

+0

フォームのonsubmitイベントに検証メソッドを追加して、標準送信を使用することもできます。 – Ishmael

+2

"また、Windows OSを使用するIEを想定しています。 - >私はこれらの仮定をするウェブサイトを呪って過ごした時間を数えることはできません... –

0

あなたは

<input ... disabled> 

EDITを使用することができませんでした。 http://htmlhelp.com/reference/html40/forms/input.html

+0

これにより、ユーザーは実際には「参照」ボタンをクリックしてファイルを選択することができなくなります。私はまだ彼らがファイルを選択できるようにします。 –

+0

ああ...まあまあ心配しないで;-) –

1

一方通行はボタンに少しのJavaScriptコードを入れることです。そのアイデアは、ボックスを検証し、提出を止めるか、許可することです。

しかし、ファイルコンテンツサーバー側を検証し、適切なエラーをクライアントに戻す方がよいでしょう。

2

これはまずは​​悪い考えです。ユーザーがWindows OSを使用しておらず、/home/user/example.txtファイルをアップロードしたい場合はどうすればよいですか?

このタイプのチェックは、サーバー側でよりよく実装される可能性があります。

+0

サーバー上ではなく、ブラウザ上にあるはずです...もしHTMLデザインが賢明だったらもちろんです。 – Javier

+1

ユーザーはHTML/Javascriptを改ざんしても、Webページがチェックする内容に準拠していないファイルを送信することができます。それを確実にする唯一の方法は、サーバー側でチェックすることです。クライアント側は、改ざんのないユーザーには時間とサーバーのリソースを節約するのには良いでしょう。 –

7

これはどうですか。入力することも、右クリックして貼り付けることもできません。

<input type="file" name="file" onKeyDown="this.blur()" onContextMenu="return false;"> 
+0

それは私を助けました。ありがとう;) – Sandeep

+0

シンプルでエレガントです。作品。 +1。 –

1

入力タイプ=ファイル要素のvalueプロパティは、セキュリティ上の問題としてのみ読み込まれます。このプロパティを読んでチェックを行うことができます。それがあなたのルールに対応していない場合、あなたは警告を出し、人にそれを修正させるでしょう。 もう1つの方法は、outerHTMLプロパティを使用してそれをオーバーライドします。 例: objInputFileElementというHTML入力ファイル要素。 objInputFileElement。outerHTML = "";

0

問題を解決するオプションが見つかりました。次のようにcontentEditableオプションは次のとおりです。ここで

<input type="file" name="name" contentEditable="false"/> 
0

contentEditableオプションのデモです:

<input type="file" name="name" contentEditable="false" /> 
0

私はthis threadに私のソリューションをベース。

ので、このファイルのフィールドを考慮:

$(document).ready(function() { 
    $('#file_field').bind("keydown", function(e) { 
     e.preventDefault(); 
    }); 
}); 

注:

<input type="file" id="file_field"> 

を私はjqueryの中でこのような何かで動作するようにそれを得たあなたが代わりにのKeyDownを使用する必要があります。 キープレスおよびBACKSPACEと任意の印刷キーがあります。

関連する問題