Как отключить текстовое поле ввода файла в IE?
можно ли запретить пользователю вводить текстовое поле ввода файла в IE? Я потому спрашиваю, что если пользователь вводит текст, который не похож на путь файловой системы (например. не начинается с чего-то вроде c:...) затем, когда пользователь нажимает кнопку отправки, ничего не произойдет.
Я хотел бы либо не разрешить пользователю вводить в поле, либо отправить форму как обычно.
Я обнаружил, что тот же вопрос был задан здесь нет ответ: http://www.webmasterworld.com/html/3290988.htm
и этот человек придумал хак, который я могу использовать, если нет другого подходящего ответа: http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom
EDIT: для уточнения-если пользователь вводит " не путь к файлу "в текстовом поле рядом с кнопкой" обзор "и нажимает кнопку "отправить", в IE ничего не произойдет. Форма не будет отправлена-IE не позволяет форме будет отправлен, если поле не имеет реального пути к файлу.
9 ответов
Как насчет этого? Вы не можете ввести или щелкнуть правой кнопкой мыши и вставить.
<input type="file" name="file" onKeyDown="this.blur()" onContextMenu="return false;">
Это может быть плохой идеей с самого начала. Что делать, если пользователь не использует ОС Windows и хочет загрузить файл /home/user/example.txt?
этот тип проверки может быть лучше реализована на стороне сервера.
Я решил это другим способом, используя кнопку, а не отправить и используя 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();
}
Я понимаю, что все еще должна быть проверка на стороне сервера для файла, но это только для того, чтобы предотвратить нажатие пользователем кнопки отправки и ничего не видеть. Кроме того, предполагается, что IE использует ОС Windows.
один из способов-поместить небольшой код javascript в кнопки onsubmit. Идея заключается в том, чтобы проверить коробку и либо остановить отправку, либо разрешить ее.
однако вам, вероятно, лучше просто проверить сервер содержимого файла и вернуть клиенту соответствующую ошибку.
свойство value элемента input type=file читается только как проблема безопасности. Вы можете прочитать это свойство и сделать проверку. Если это не соответствует вашим правилам, вы дадите предупреждение и позволите человеку изменить его. Другой способ использовать свойство outerHTML переопределить его. например: Элемент входного файла HTML называется objInputFileElement. objInputFileElement.outerHTML="";
не могли бы вы использовать
<input ... disabled>
редактировать: нет, на самом деле это также предотвращает представление... но в HTML 4, видимо
<input ... readonly>
должны работать. http://htmlhelp.com/reference/html40/forms/input.html
Я нашел вариант, который решает вашу проблему. Это следующим образом:
<input type="file" name="name" contentEditable="false"/>
Я основал свое решение на этой теме.
Итак, учитывая это поле файла:
<input type="file" id="file_field">
Я получил его для работы с чем-то вроде этого в jquery:
$(document).ready( function() {
$('#file_field').bind("keydown", function(e) {
e.preventDefault();
});
});
Примечание: вы должны использовать keydown вместо нажатие как он охватывает DEL и BACKSPACE, а также любой ключ печати.