2010-01-12 2 views
1

J'ai le gestionnaire suivant dans ma page qui fonctionne bien dans Firefox, mais il est apparemment pas attaché à IE8, car il ajoute les paramètres à l'URL, et ne fait pas de ajax appelle le serveur:jQuery: Comment joindre un événement de soumission dans Firefox et Internet Explorer?

$('#editBox form').live('submit',function(event){ 
     var daId = $('#editBox #id').val(); 

     $.post(
      '/edit.php', 
      { 
       company: $('#company',this).val(), 
       name: $('#name',this).val(), 
       email: $('#email',this).val(), 
       id: daId 
      }, 
      function(response){ 
       sel = 'tr#' + daId; 
       $(sel).html(response) 
       .animate({backgroundColor: 'yellow'},500) 
       .animate({backgroundColor: 'white'},500); 

       $(sel + ' td:nth-child(3)').addClass('lastCell'); 

      }); 

      $('#editBox').hide('fast', function(){ 
       toggleHider(); 
       $(this).remove(); 
      }); 

      updateSorting();     

      consoleMessage('User changes saved'); 

     return false; 
}); 

Comment puis-je faire ce travail à la fois dans IE et FF?

Mise à jour

Je ne suis toujours pas en mesure d'obtenir ce travail à droite. Grâce à la solution de Joel ci-dessous, voici ce que j'ai:

function BindSubmit() 
{ 
    $('#editBox form').unbind('submit').bind('submit', function() { 
      var daId = $('#editBox #id').val(); 

      $.post(
       '/webadmin/CDAdmin/editrep.php', 
       { 
        company: $('#company',this).val(), 
        name: $('#name',this).val(), 
        email: $('#email',this).val(), 
        id: daId 
       }, 
       function(response){ 
        sel = 'tr#' + daId; 
        $(sel).html(response) 
        .animate({backgroundColor: 'yellow'},500) 
        .animate({backgroundColor: 'white'},500); 

        $(sel + ' td:nth-child(3)').addClass('lastCell'); 

       }); 

       $('#editBox').hide('fast', function(){ 
        toggleHider(); 
        $(this).remove(); 
       }); 

       updateSorting();     

       consoleMessage('User changes saved'); 

      return false; 
    }); 
} 

Et voici ce que je suis en train de l'utiliser:

$tr.live('click',function(event){ 
     if ($('#editBox').length){ 
      $('#editBox').remove(); 
     } 

     var eb = $('<div>').attr('id','editBox'); 

     $('#startEditBox').children().clone(true).appendTo(eb); 

     BindSubmit(); 

Mais cela ne fonctionne pas. Maintenant, l'événement n'est pas attaché dans FF ou IE.

Répondre

1

live() n'est pas pris en charge sur l'événement submit dans JQuery 1.3.x. Essayez le JQuery 1.4 RC 1.

Si la mise à niveau n'est pas une option, vous devez lier manuellement l'événement de soumission chaque fois que vous ajoutez un formulaire à la page.

E.g.

function BindSubmit() 
{ 
    $('#editBox form').unbind('submit').bind('submit', function() { 
     ... 
    }); 
} 

Ensuite, appelez BindSubmit() chaque fois que vous ajoutez un élément de formulaire à #editBox.

+0

Mise à niveau vers 1.4 RC 1 ne semble pas faire une différence - ne fonctionne toujours pas dans IE – croceldon

+0

Hmm, je ne l'ai pas réellement utilisé 1.4 encore, mais les docs dire supporte tous les événements js. Quoi qu'il en soit, voir ma modification d'une méthode pour lier directement l'événement à chaque fois qu'un formulaire est ajouté. – Joel

+0

Merci - mais j'ai toujours des problèmes. S'il vous plaît voir ma mise à jour à la question initiale. – croceldon

2

submit est pas pris en charge comme un événement en direct

de http://docs.jquery.com/Events/live#typefn

pas pris en charge: flou, mise au point, mouseenter, mouseleave, changement, soumettre

et

.live (actuellement) prend en charge un sous-ensemble de tous les événements. Notez la liste complète des événements pris en charge/non pris en charge ci-dessus.

J'ai eu le même problème avec $.live("change") Cela a fonctionné dans FF, mais pas IE. J'ai fini par utiliser $ .change().

Je suggère d'utiliser .submit $()

Bind l'événement chaque fois qu'un nouveau form est ajouté à #editBox

$('#editBox form').submit(function(event){ 
    .. 
}); 

Mise à jour

Assurez-vous d'ajouter l'élément Editbox à la Dom avant d'essayer de lier l'événement submit.

$tr.live('click',function(event){ 
    if ($('#editBox').length){ 
    $('#editBox').remove(); 
    } 

    var eb = $('<div>').attr('id','editBox'); 

    $('#startEditBox').children().clone(true).appendTo(eb); 

    //add into the page somewhere 
    $('#something').append(eb); 

    //then bind the submit event 
    BindSubmit(); 
+0

Vrai, mais pourquoi ça marche en FF? –

+0

@Jacob: Le modèle d'événement de FF n'est pas le même que celui d'IE. Je devine que les événements de soumission bulle dans FF mais pas IE, donc la délégation à un élément parent ne fonctionne pas. – Joel

+0

Merci, moses! Désolé, je ne peux pas accepter deux réponses .... – croceldon

Questions connexes