JQuery и атрибуты формы меняются в IE - PullRequest
1 голос
/ 25 марта 2010

Я хочу изменить атрибуты формы с помощью JQuery. В других браузерах работает нормально, но не в IE (6,7,8).

Код:

action = '/controller/action/id/';
target = 'upload_iframe';
enctype = 'multipart/form-data';    

$('#form1').attr("action",action);
$('#form1').attr("target",target);
$('#form1').attr("enctype",enctype);

Так в чем же проблема? Ваша помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 24 января 2011

Возможно, у вас есть поле с именем «action»:

<input name="action" value="hot">

И IE, будучи запущенным браузером, смешивает 2 ...

3 голосов
/ 25 марта 2010

Попробуйте это

$('#form1').attr("action","/controller/action/id/");
$('#form1').attr("target","upload_iframe");
$('#form1').attr("enctype","multipart/form-data");

Я только что попробовал это, и это работает в каждом браузере для меня ..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>

    <script type="text/javascript">
  $(document).ready(function() {
    $("#btn").click(function() {
     $('#form1').attr("action","/controller/action/id/");
     $('#form1').attr("target","upload_iframe");
     $('#form1').attr("enctype","multipart/form-data");

    });
  });
  </script>

</head>

<body>

<form id="form1" action="something.html" method="post" name="forma" target="target" enctype="nope">

     <a href="#" id="btn">Uno mas</a>  

</form>

</body>
</html>

У меня так же работает, только что проверил IE7 & 8:

    action = '/controller/action/id/';
    target = 'upload_iframe';
    enctype = 'multipart/form-data';    

    $('#form1').attr("action",action);
    $('#form1').attr("target",target);
    $('#form1').attr("enctype",enctype);

    console.log($('#form1').attr("action") + " " + $('#form1').attr("target") + " " + $('#form1').attr("enctype"));

alert($('#form1').attr("action") + " " + $('#form1').attr("target") + " " + $('#form1').attr("enctype"));
1 голос
/ 25 февраля 2011

Удалось заставить атрибут enctype работать в разных браузерах (FF, IE7 / IE8, Chrome) с помощью следующего хака (используя свойство encoding):

$('#form1').get(0).encoding = 'multipart/form-data';
0 голосов
/ 06 февраля 2011

Кажется, метод jQuery attr () не работает в IE8 для атрибута enctype. Например:

f=$('<form>');
f.attr({"target":"ta","id":"idx"});//OK - FF and IE8
f.attr("method","post");//OK - FF and IE8
f.attr("enctype","multipart/form-data");//OK in FF, but not in IE8!!!

IE8 не отправляет содержимое файла через загрузку. Но есть простое решение:

f=$('<form enctype="multipart/form-data" />');//FF and IE8

страница подтверждения:

<html>
<head>
    <title>Example page for jQuery attr() bug - it can't set enctype attribute in form tag</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" type="text/javascript"></script>

    <script type="text/javascript">
      $(document).ready(function() {
         //next two lines don't work in IE8, but they work in FF        
         f=$('<form />');
         f.attr("enctype","multipart/form-data");
         //comment two previous lines, uncomment next line and it work in IE8 
         //f=$('<form enctype="multipart/form-data" />');
         f.attr("method","post");
         f.append('<input type="file" name="ffile" id="ffile" /><input name="fsubmit" id="fsubmit" type="submit">'); 
         $(document.body).append(f);        

  });
  </script>
</head>
<body>
<p>
<?php
 if(@basename(htmlspecialchars($_FILES['ffile']['name'])))echo "Browser has sent a file ".$_FILES['ffile']['name'];
 else echo "Browser hasn't sent a file.";
?>
</p>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...