Как ОТВЕТИТЬ на событие щелчка на типе ввода = файл в не IE браузерах - PullRequest
2 голосов
/ 02 марта 2011

Так вот сценарий -

В отличие от 3000 других вопросов в StackOverflow о том, как ВЫЗВАТЬ событие click для элемента input [type = file], я просто хочу ответить на него. Я ищу что-то вроде:

<input id="theFile" onclick="var that=this;setTimeout(function(){if(that.value){postTheForm();}}),0);" />

Я не пытаюсь вызвать click () для элемента, я просто хочу знать, когда кто-то выбрал файл, чтобы мы могли отправить форму. В IE это работает, как и ожидалось, потому что диалоговое окно файла скрывает поток JavaScript, пока пользователь не нажмет кнопку «Открыть» или «Отмена» в диалоговом окне. В FireFox кажется, что диалог не спит поток, и анонимная функция срабатывает немедленно - даже когда диалог все еще работает.

Я думал, могу ли я использовать событие onchange или что-то еще в FireFox для имитации поведения IE, но пока мне не повезло. Любые идеи относительно того, как я могу выполнить код ПОСЛЕ того, как пользователь нажимает кнопку Открыть или Отмена в диалоговом окне?

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Когда вы щелкаете по файлу загрузки, говорите jQuery, чтобы сфокусировать его, когда вы выбираете файл и нажимаете кнопку открыть / отменить, он теряет фокус, также известный как blur.

$(function() {
    $("#fileUpload").click(function() {
        $(this).focus();
    });
    $("#fileUpload").blur(function() {
        alert("blurred");
    });
});

Я проверил это в Chrome.

0 голосов
/ 02 марта 2011

использование: onchange="submitForm()"

0 голосов
/ 02 марта 2011

Ну, вы можете запустить интервальный таймер, чтобы проверять каждые 100 миллисекунд или около того.

$('input:file').click(function() {
  var file = this, form = this.form, val = this.value, interval;
  function checkValue() {
    if (file.value !== val) {
      cancelInterval(interval);
      form.submit();
    }
  }
  interval = setInterval(checkValue, 100);
});

Дело в том, что это немного хрупко, потому что «значение» входного файла не является полным путем. Тем не менее, поскольку вы в любом случае отправляете всю форму, у пользователя действительно нет возможности щелкнуть элемент файла более одного раза.

изменить & mdash; это предполагает, что событие «изменения» действительно не работает для вас; На данный момент у меня нет Firefox, чтобы увидеть.

...