Как отключить текстовое поле ввода файла в 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" 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, а также любой ключ печати.