2010-09-02 5 views
0

Donc, c'est étrange, et cela a fonctionné pour moi il y a environ un mois, avant que je fasse un tas de mises à jour de code. De toute façon, le problème est le gestionnaire de soumission en direct ne fonctionnera même pas dans IE8, cependant, si je l'exécute sur un clic de bouton, cela fonctionne. Voir ci-dessous:IE8 soumet seulement avec le bouton, ne pas soumettre?

HTML

 <label>Add Attachment</label> 
     <form class="file_upload" method="post" enctype="multipart/form-data" target="upload_target" action=""> 
      <input name="binary" id="file" size="27" type="file" /><br /> 
      <br><input type="submit" name="action" value="Upload" /><br /> 
      <input type="button" class="test" value="test"> 
      <iframe class="upload_target" name="upload_target" src="" style=""></iframe> 
     </form> 
     <label>Attachments</label> 
     <ul class="upload_output"> 
     <li class="nofiles">(No Files Added, Yet)</li> 
     </ul> 

JavaScript:

function file_upload($theform,item_id){ 
    $theform.attr('ACTION','io.cfm?action=updateitemfile&item_id='+item_id); 
    if($theform.find('[type=file]').val().length > 0){ 
     $('iframe').one('load',function(){ 
      $livepreview.agenda({ 
       action:'get', 
       id:item_id, 
       type:'item', 
       callback:function(json){ 
        $theform.siblings('.upload_output').append('<li style="display:none" class="file-upload"><a target="blank" href="io.cfm?action=getitemfile&item_file_id='+json[0].files.slice(-1)[0].item_file_id+'">'+json[0].files.slice(-1)[0].file_name+'</a> <a style="color:red" title="Delete file?" href="#deletefile-'+json[0].files.slice(-1)[0].item_file_id+'">[X]</a></li>').children('li').fadeIn(); 
        $theform.siblings('.upload_output').find('.nofiles').remove(); 
       } 
      }); 
      //Resets the file input. The only way to get it cross browser compatible as resetting the val to nothing 
      //Doesn't work in IE8. It ignores val('') to reset it. 
      $theform.append('<input type="reset" style="display:none">').children('[type=reset]').click().remove(); 
     }); 
    } 
    else{ 
     $.alert('No file selected'); 
     return false; 
    } 
} 
/* FILE UPLOAD EVENTS */ 
//When they select "upload" in the modal 
$('.file_upload').live('submit',function(event){ 
    alert('hello world'); 
    file_upload($('.agenda-modal .file_upload'),$('.agenda-modal').attr('data-defaultitemid')); 
}); 
/* This is the code that makes it work..., but i dont want it! it should alert hello world on the submit button! */ 
$('.test').live('click',function(event){ 
    $('.file_upload').submit(); 
}); 
+0

Juste une petite vérification rapide - toutes les URL sont-elles servies par le même domaine? ie8 a apporté de meilleurs XSS-defenses donc la même politique d'origine peut être plus strictement appliquée ... – Basic

+0

Ouais :(c'est tout le même domaine ... Et comme je l'ai dit, ça fonctionne quand vous appuyez sur le bouton, mais pas le soumettre –

Répondre

-1
  1. au lieu de créer le bouton de réinitialisation, émulant événement click et détruire - pourquoi pas seulement

    $('.file_upload').reset(); 
    
  2. Avez-vous ont besoin de en direct pour soumettre le formulaire? Si le bouton reste dans les DOM tout le temps, faire utiliser l'événement click normal comme

    $('.test').click(function(){ 
        $('.file_upload').submit(); 
    }); 
    
+0

Reset n'a pas fonctionné dans IE8 du tout.Je l'ai juste gardé là-bas.Confiance moi ... je pense que c'est un hack semblant laid, mais .reset() n'a rien fait. Le formulaire n'est pas statique. La forme est générée automagiquement à partir d'une sorte de "template" dans le DOM et elle est clonée et manipulée puis placée dans une boîte modale –

0

C'est par la conception, et pas du tout isolé à IE 8. Il a toujours été de cette façon, dans tous les navigateurs.

L'événement submit ne se produit pas si vous appelez la méthode submit, uniquement lorsque vous envoyez le formulaire à l'aide du bouton Envoyer.

+0

Alors ... comment est-ce que je corrige ça? J'ai fait des mises à jour de code, et je peux juste cacher le bouton soumettre et faire un type d'entrée = bouton "bouton" et avoir ce gestionnaire de clic, c'est juste moche ... –

Questions connexes