Internet Explorer не будет отправлять форму обратной связи, если я добавлю скрипт на кнопку отправки - PullRequest
3 голосов
/ 08 февраля 2012

У меня проблема с тем, что моя форма работает во всех браузерах, кроме IE.

Я уменьшил проблему до самой маленькой, которая все еще имеет проблему.

Я создал тестHTML-файл, который выглядит следующим образом:

<html>
  <body>
    <form id="myform" action="/" method="post" enctype="multipart/form-data">
      <input id="fileToUpload" type="file" size="10" name="fileToUpload" />
      <input id="mysubmit" type="submit" value="submit"/>
    </form>
    <script src="jquery-1.5.1.js" type="text/javascript"></script>
    <script type="text/javascript">
      $( function(){
       *$("#mysubmit").click(function(){
         *$("#fileToUpload").click();
       *});
      });
    </script>
  </body>
</html>

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

В «реальной жизни» это немного большесложный, поскольку Firefox и Chrome не ждут закрытия диалогового окна выбора файла перед продолжением скрипта после $("#fileToUpload").click();, а Internet Explorer ждет, пока он не закроется, прежде чем продолжить.Но я могу справиться с этими вещами.

Но в этом случае IE вообще не выполняет обратную передачу формы.Если я уберу строки с префиксом звезды выше, IE также отправит их обратно.Я также попытался поставить $("#myform").submit(); в конце там, но мне тоже не повезло.Без обратной передачи.

Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Может быть, вы можете использовать это, просто основная идея, вы должны поместить его в функцию готовности

$("fileToUpload").change(function (){
   $('#fileToUpload').submit();
 });
1 голос
/ 09 февраля 2012

Я думаю, что это невозможно, я поиграл с этим здесь: http://jsfiddle.net/K35tB/5/ Также используя таймеры, чтобы проверить, содержит ли fileToUpload что-то, а затем попытаться вызвать обратную передачу. Что происходит, так это то, что я получаю сообщение «Отказ в доступе», если я делаю обратную передачу после того, как FileToUload был запущен. Если я выполняю обратную передачу раньше, это работает. Так что это как-то связано.

   $("#mysubmit").click(function(){
      document.getElementById("fileToUpload").click();
      document.forms["myform"].submit(); // JavaScript error, No permission / Access denied (Åtkomst nekas in Swedish ;-))
   });

Но, конечно, этот код работает

document.forms["myform"].submit();

Я играл с IE 8.0.7 Если вы проверите пример Fiddle, измените его и запустите версию таймера, вы увидите, что путь виден для звука, и когда мы выполним «Отправить», он отклонится.

Возможно, вам следует попробовать сделать то же самое, используя http://swfupload.org/ или какой-либо другой компонент. Если в вашем проекте нет необходимости использовать элементы управления HTML. Надеюсь, это каким-то образом помогло!

Редактировать 1: Я попробовал еще несколько примеров, и это работает правильно, если вы поместите fileToUpload вне тега формы. Так что это наводит на мысли, что это какая-то вещь, связанная с безопасностью. Я также попытался поместить fileToUpload за пределы формы и непосредственно перед постбэком, изменив DOM и вставив его в форму. Тот же результат, доступ запрещен ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...