2009-02-26 59 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不允许提交表单。

回答

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(); 
} 

我意识到仍有需要为文件服务器端验证,但是这仅仅是防止对Submit按钮,并没有看到什么情况发生用户点击。另外,它假定使用Windows操作系统的IE。

0

你不能使用

<input ... disabled> 

编辑:没有,实际上是阻止提交以及...但在HTML 4显然

<input ... readonly> 

应该工作。 http://htmlhelp.com/reference/html40/forms/input.html

+0

这会禁止用户实际单击“浏览”按钮选择文件。我仍然希望他们能够选择一个文件。 – 2009-02-26 18:05:51

+0

哦......那么没关系;-) – 2009-02-26 18:07:24

1

一种方法是在onsubmit按钮上放一点javascript代码。这个想法是验证盒子并停止提交或允许。

但是,您可能最好只验证文件内容服务器端并将合适的错误提交给客户端。

2

这可能是一个坏主意开始。如果用户没有使用Windows操作系统并想上传文件/home/user/example.txt会怎么样?

这种类型的检查可能会更好地实现服务器端。

+0

不在服务器上,它应该在浏览器上......当然,如果HTML设计更加安全。 – Javier 2009-02-26 19:15:33

+1

用户可以篡改HTML/Javascript并仍然提交不符合网页检查内容的文件。确保它的唯一方法是检查它在服务器端。客户端在一段时间和服务器资源下仍然可以很好地保存非篡改用户。 – 2009-02-26 19:27:35

7

这个怎么样?您无法输入,或右键点击并粘贴。

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

对于安全问题,input type = file元素的value属性是只读的。你可以阅读这个属性并做一个检查。如果它不符合你的规则,你会发出警告并让人修改它。 使用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解决方案。

因此,考虑该文件中的字段:

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

我得到了它的jQuery的是这样工作的:

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

注:您必须使用的keydown代替keypress因为它覆盖了DEL和BACKSPACE以及任何打印键。

相关问题