2009-10-17 6 views
0

Quel serait le meilleur moyen d'envoyer un message d'alerte à l'utilisateur s'il l'obligeait à se connecter, mais en même temps éviter un appel ajax? Je pourrais avoir le code comme <a href="#" id="vote"> qui déclencherait une fonction ajax basée sur le clic. Je pensais que je verrais sur le côté serveur si un utilisateur est connecté et le remplacer par: <a href="#" class="not-logged-in">. Si vous cliquez dessus, cela les avertira qu'ils doivent se connecter. Le problème est que je pourrais avoir des styles CSS pour le #vote. Si à la place je le fais <a href="#" id="vote" class="not-logged-in"> il déclencherait à la fois l'appel ajax et l'alerte, donc je devrais envelopper l'appel ajax avec une vérification pour voir que la classe not-loggin-in n'existe pas, mais cela semble un peu fastidieux pour faire cela pour toutes mes fonctions de clic qui ont des appels ajax. Ou bien j'appellerais l'identifiant parent et définirais le style comme #parentId a {}? Ou y a-t-il de meilleures méthodes? Je ne suis pas sûr de ce que les gens font habituellement, alors je cherche des opinions. Merci!Envoyer un message d'alerte si l'utilisateur n'est pas connecté

Répondre

0

Que diriez-vous ceci:

Le code HTML:

<body class="not-logged-in"> -- or -- <body class="logged-in"> 
<a href="/vote/13" class="vote">Vote!</a> 

Le jQuery:

$('body.logged-in .vote').click(function(){ 
    $(this).append($.get($(this).attr('href')); 
    return false; 
}); 
+0

Merci, n'a pas pensé à le faire de cette façon. – Roger

0

Si votre gestionnaire de clic pour l'élément a#vote est lié à l'ID vote, vous aurez devez soit modifier l'ID pour les utilisateurs déconnectés ou ajouter un conditionnel au gestionnaire de clic. Vous avez mentionné que vous ne voulez pas vérifier la classe not-logged-in avant de procéder à l'appel AJAX, donc je suppose que cela signifie que vous préférez laisser le gestionnaire de clic seul et trouver un autre moyen d'avoir le lien ressemble au lien de vote mais n'agit pas comme le lien de vote.

Vous pouvez faire une id autre et lui donner le même style, comme ceci:

HTML:

<a href="#" id="fakeVote"> 

CSS:

 
#vote, #fakeVote { 
    /* CSS here */ 
} 

La bonne chose à propos c'est que vous pouvez simplement ajouter un nouveau gestionnaire de clic pour l'élément a#fakeVote pour alerter t il s'est déconnecté des utilisateurs.

0

Si vous souhaitez réduire la durée de recherche DOM à chaque clic, attachez simplement la classe "loggedIn" à l'élément body et effectuez la vérification juste après le chargement de la page.

var loggedIn = $('body').hasClass('loggedIn'); 

Maintenant, vous n'avez pas à vérifier le lien lui-même, mais plutôt cette variable.

Vous pouvez également écrire un wrapper pour vos appels ajax.

$.fn.ajaxLoggedIn = function() { 
    if (loggedIn) { 
    $.ajax.apply(this, arguments); 
    } 
    else { 
    alert('You are not logged in'); 
    } 
} 
Questions connexes