2010-09-30 17 views
1

Je veux utiliser deux forme de bouton et créé ce qui suit qui fonctionne. Il casse cependant tous les autres événements sur la page mais je n'arrive pas à comprendre pourquoi. Y a-t-il un meilleur moyen?Soumission de deux boutons interrompt d'autres événements sur la page (mootools)

 window.addEvent('domready', function() { 
     $('vote1').addEvent('click',function() { 
      new Element('input', { 
        'type': 'hidden', 
        'name': 'winner', 
        'id': 'vote1id', 
        'value': 'vote1' 
       }).inject($('voterform')); 
      $('vote_wrapper').setStyle('display','none'); 
     }); 

     $('vote2').addEvent('click',function() { 
      new Element('input', { 
        'type': 'hidden', 
        'name': 'winner', 
        'id': 'vote2id', 
        'value': 'vote2' 
       }).inject($('voterform')); 
      $('vote_wrapper').setStyle('display','none'); 
     }); 

     $('voterform').addEvent('submit', function(e) { 
      e.stop(); 
      var log = $('v_wrapper').empty().addClass('loader'); 
      this.set('send', {onComplete: function(response) { 
       log.removeClass('loader'); 
       $('v_wrapper').set('html', response).set("tween", {duration: 2500}).setOpacity(0).fade(1); 
      }}); 
      this.send(); 
     }); 
    }); 
+0

Quels sont les autres événements qui se produisent? très od - je ne vois rien de mal avec votre code. une chose que vous pouvez faire pour vous sauver en soutenant deux ensembles de gestionnaires, gardez le code de vote1 tel quel, placez le gestionnaire de clic sur le vote2 pour faire 1document.id ("vote1"). fireEvent ("clic"); '. sinon, postez plus sur le problème s'il vous plaît –

+0

Je suppose que j'aurais dû dire demandes. Tout type de requête html n'est pas renvoyé via ajax mais se décompose en une nouvelle page avec le résultat. – JJohn

+0

je vois. une exception non interceptée qui empêche l'exécution de la fonction de rappel, d'où le comportement par défaut du navigateur (j'exécute le code ci-dessus via jslint donc quoi que ce soit, ce n'est pas de la syntaxe ou pas dans ce bloc de code). et deux: l'événement traité incorrectement/le bouillonnement ne réussit pas à arrêter l'action par défaut. __Vous dites que vous pouvez supprimer les deux gestionnaires d'événements click et que votre formulaire fonctionne par XHR? __ vous vous référez à '$ ('v_wrapper')' et '$ ('vote_wrapper')' - est-ce intentionnel? –

Répondre

0

Dans le code ci-dessus si $ (« vote1 ») ou $ (« voix2 ») sont des liens ou des boutons de formulaire, vous voulez modifier votre code comme suit pour empêcher l'action par défaut de se produire:

$('vote1').addEvent('click',function(e) { 
     e.stop(); 
     new Element('input', { 
       'type': 'hidden', 
       'name': 'winner', 
       'id': 'vote1id', 
       'value': 'vote1' 
      }).inject($('voterform')); 
     $('vote_wrapper').setStyle('display','none'); 
    }); 

    $('vote2').addEvent('click',function(e) { 
     e.stop(); 
     new Element('input', { 
       'type': 'hidden', 
       'name': 'winner', 
       'id': 'vote2id', 
       'value': 'vote2' 
      }).inject($('voterform')); 
     $('vote_wrapper').setStyle('display','none'); 
    }); 
+0

Avez-vous un lien vers ce code? Si c'est le cas, cela aiderait énormément à isoler le problème. –