2011-12-21 9 views
1

Je 1 bloc:sélecteur ne fonctionne pas correctement

<div class="going" filmid="2"> 
<a href="">I am going!</a> 
<div>Going too: 20</div> 
</div> 

et 5 blocs:

<div class="going"> 
<a href="">I am going!</a> 
<div>Going too: 20</div> 
</div> 

La différence dans ce bloc ont un attribut filmid.
fonction Mes js:

function setUpUpdateGoingCount() { 
      $("div.going a").click(function (e) { 
       e.preventDefault(); 
       var filmId = $(this).parent("div").attr("filmid"); 
       $.post("/Cinema/UpdateGoingCount", { id: filmId }, function() { 
        alert("test"); 
       }); 
      }); 
     } 

travail événement Click bien avec bloc sans filmid attribuiez.
Pouvez-vous m'expliquer pourquoi et comment faire ce premier bloc fonctionne bien?

+0

s'il vous plaît définir « fonctionne bien » ... ce qui se passe sur le premier bloc? Quel type de document utilisez-vous? – fcalderan

+1

http://jsfiddle.net – noob

+0

Je veux dire que les seconds blocs montrent messgage (test), le premier bloc ne recharge que la page. – user348173

Répondre

4

Parce que filmid n'est pas un attribut qui existe en HTML, vous devriez plutôt utiliser un attribut de données:

<div class="going" data-filmid="2"> 

Vous pouvez y accéder avec:

var filmId = $(this).parent("div").data("filmid"); 
0

Vous aurez besoin d'ajouter un deuxième classe aux blocs sans filmid à utiliser dans votre sélecteur que le .click va se lier à tous les div., qu'ils aient un attribut filmid ou non.

2

Le message AJAX est envoyé dans les deux cas. Les ancres (liens) à l'intérieur de divs avec filmid ensemble, sont envoyés avec le param id réglé sur le contenu de filmid. Les divs ne contenant pas filmid sont envoyés avec le param vide.

udate Si vous entendez par ne fonctionne pas que le javascript ne montre pas le message d'alerte, qui peut être parce que vous obtenez une erreur sur cet appel, et vous aurez besoin de spécifier une fonction d'erreur de cette façon:

function setUpUpdateGoingCount() { 
    $("div.going a").click(function(e) { 
     e.preventDefault(); 
     var filmId = $(this).parent("div").attr("filmid"); 
     $.post("/Cinema/UpdateGoingCount", { 
      id: filmId 
     }, function() { 
      alert("test"); 
     }).error(function() { 
      alert("error"); 
     }); 
    }); 
} 

Ceci est un exemple de travail avec votre code http://jsfiddle.net/hpgsL/1/