2014-07-04 1 views
0

J'ai une forme et un morceau de code pour créer javascriptAJAX formes. La chose étrange est quand je soumets mon formulaire dans Internet Explorer la seule chose qui affiche est [object Object]. Le formulaire fonctionne correctement dans Google Chrome. Voici mon code:Impossible d'annuler l'action par défaut sur le formulaire ajax présenter

tête de formulaire:

<form id="page-details-form" class="ajax-form" name="page-details-form" method="POST" action="/pages/save/1"> 

auditeur Javascript:

<script> 
    $(function(){ 

     $(document).on("submit",".ajax-form",function(e){ 
      if (window.event) { 
       window.event.returnValue = false; 
      }   
      e.preventDefault ? e.preventDefault() : e.returnValue = false; 

      $('.form-message').remove(); 

      if($('#onSubmitJsEval').html() && $('#onSubmitJsEval').html().length > 0) 
      { 
       eval($('#onSubmitJsEval').html()); 
      } 

      var submitBtnValue = $('#submitBtn').html(); 
      var formId   = $(this).attr('id'); 
      var postData  = $(this).serializeArray(); 

      $('#submitBtn')  .html('<img src="images/ajax-loader.gif" />'); 
      $('p.has-error') .remove(); 
      $('div.has-error') .removeClass('has-error'); 

      $.post($(this).attr('action'), postData, function(jsonResponse) 
      { 
       var jsonObject = jQuery.parseJSON(jsonResponse); 

       if(jsonObject.success == true) 
       { 
        $('<div class="<?=MESSAGE_SUCCESS_CLASS?>"><?=MESSAGE_SUCCESS_PREFIX?>'+jsonObject.message+'</div>').insertBefore("#" + formId + " h2"); 
        if(jsonObject.insertedId > 0) 
        { 
         var stringPath = window.location.pathname.substr(window.location.pathname.length - 1); 

         document.location.href = window.location.pathname + ((stringPath != "/") ? "/" : "") + jsonObject.insertedId; 
        } 
       } 
       else 
       { 
        $('<div class="<?=MESSAGE_ERROR_CLASS?>"><?=MESSAGE_ERROR_PREFIX?>'+jsonObject.message+'</div>').insertBefore("#" + formId + " h2"); 
        $.each(jsonObject.errors, function(index, value){ 

         $('[name='+index+']').parent().addClass('has-error'); 
         $('[name='+index+']').after('<p class="has-error help-block">'+value+'</p>'); 
        }) 

       } 

       $('#submitBtn').html(submitBtnValue); 
      }); 

     }); 


    }); 

</script> 

J'ai essayé plusieurs options en plus de l'option actuelle:

  • if (e.preventDefault) e.preventDefault();
  • e.returnValue = false
  • e.returnValue = false après e.preventDefault

Quelqu'un at-il une idée? Si j'ai besoin de publier plus de code s'il vous plaît faites le moi savoir. Je peux poster tout le code si tu veux.

Merci beaucoup!

+0

'e.returnValue = false ;;' doubles points-virgules? et pourquoi ne pas essayer avec 'e.preventDefault();' Pourquoi avez-vous besoin d'une condition if pour cela? – Jai

+0

voir la mise à jour ...... –

+0

Je suis désolé je viens de coller le code erroné. Je le mets à jour avec le code javascript complet. –

Répondre

1

Vous aurez besoin d'une combinaison de e.preventDefault() et return false, avec le code de gestion inbetween.

$(document).on("submit", ".ajax-form", function(e) { 
    e.preventDefault(); 
    //Do your stuff here 
    return false; 
}); 
+0

It stil doens ' t travail. J'ai ajouté 'return false' ajouter la fin et' e.preventDefault(); 'comme première règle. Mais la sortie est différente maintenant. Internet Explorer imprime maintenant la réponse JSON au lieu de '[objet objet]'. Donc, il donne juste le formulaire parce qu'il va à SITE/pages/save/1. –

+0

Veuillez fournir une description exacte de ce qui ne fonctionne pas. –

+0

Cela ressemble à 'e.preventDefault? e.preventDefault(): e.returnValue = false; 'fonctionne pour empêcher la valeur par défaut car il ne redirige pas vers SITE/save/details/1 mais au lieu de cela il affiche' [object object] '. Donc quand je soumets le formulaire Internet Explorer affiche '[object Object]' mais je dois juste faire l'appel AJAX et l'action après l'appel AJAX. La question spécifique est pourquoi Internet Explorer montre-t-il ce message au lieu de ne rien faire avec la fenêtre courante? –

Questions connexes