2009-05-05 4 views
2

Pour les liens avec une classe CSS particulière, je voudrais contrôler si les liens s'ouvrent dans la même fenêtre, une nouvelle fenêtre ou une fenêtre contextuelle (en utilisant onclick), basée sur la sélection de l'utilisateur à partir d'un groupe de boutons radio - puis enregistrer ce choix dans un cookie (tout en utilisant jQuery). Quelqu'un sait comment accomplir cela?Préférences des liens de contrôle avec contrôles de boutons radio et jquery

Répondre

3

C'est probablement que je le ferais ... (vous aurez besoin du jQuery cookie plugin):

<script language="javascript"> 
$(function() { 
    if($.cookie('link_pref')) { 
    var link_pref = $.cookie('link_pref'); 
     $('#link_options_form :radio[value="'+ link_pref+'"]') 
     .attr('checked','checked'); 
    } 
    $.cookie('link_pref',$('#link_options_form :radio:checked').val(), {expires: 0}); 
    $('#link_options_form :radio').unbind('click').bind('click',function() { 
     $.cookie('link_pref', $(this).val(), {expires: 0}); 
    }); 
    $('a').unbind('click').bind('click',function() { 
     var link_pref = $.cookie('link_pref'); 
     var href = $(this).attr('href'); 
     var link_txt = $(this).text(); 
     switch(link_pref) { 
      case 'new': 
       $(this).attr('target','_blank'); 
       return true; 
      case 'pop': 
       window.open(href,link_txt,'width=640,height=480,toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,copyhistory=yes,resizable=yes'); 
       return false; 
      case 'greybox': 
       // Other options found here: 
       // http://orangoo.com/labs/greybox/advance_usage.html 
       GB_show(link_txt, href); 
       return false; 
      default: 
       $(this).attr('target','_self'); 
       return true; 
     } 
    }); 
}); 
</script> 

<form id="link_options_form"> 
    <label><input type="radio" name="link_options" value="same" /> Open in Same Window</label> 
    <label><input type="radio" name="link_options" value="new" /> Open in New Window</label> 
    <label><input type="radio" name="link_options" value="pop" /> Open in Pop-Up Window</label> 
    <label><input type="radio" name="link_options" value="greybox" /> Open in Greybox</label> 
</form> 

Edit: Désolé que je ne l'ai pas testé en premier. J'ai eu quelques fautes de frappe et j'ai oublié de mettre le cookie pour commencer (désolé). Je l'ai testé et il fonctionne maintenant avec votre HTML. Utilisez le code nouvellement édité ci-dessus. ;-)

Édition 2: J'ai ajouté un lien direct au cookie plugin juste au cas où, pour une raison quelconque, vous n'utilisez pas le bon.

Éditer 3: Personnellement, je ne définirais pas le bouton radio comme vérifié en javascript ... vous pouvez accéder au même cookie dans votre langue côté serveur je crois. Mais, j'ai fourni un moyen qui devrait fonctionner dans mon code nouvellement édité.

Édition 4: Le réglage initial du bug des boutons radio cochés a été corrigé. Ca devrait vraiment vraiment marcher cette fois. Pour de vrai. o_0

+0

Merci pour votre réponse, Kyle, mais je n'ai pas réussi à le faire fonctionner. Voici le code de la page complète que j'ai utilisé: http://textsnip.com/734b04 - merci pour votre aide. – user55655

+0

Merci pour votre aide! Je l'ai eu à travailler, mais il trébuche beaucoup d'erreurs dans le navigateur. "Trop de récursion", entre autres. (Je ne suis pas sûr de ce que cela signifie) Aussi, une fois que j'ai sélectionné l'option "nouvelle fenêtre" et ouvert un lien, puis sélectionnez à nouveau "même fenêtre", il utilise toujours une nouvelle fenêtre pour les liens. Des idées? Merci encore. – user55655

+0

Je ne suis pas sûr du problème de la récurrence car je ne suis pas en boucle sur quoi que ce soit. Avez-vous l'erreur dans Firefox? Combien de liens avez-vous sur cette page ?? Cela pourrait être le problème. De toute façon, le bug 'nouvelle fenêtre'/'même fenêtre' est corrigé. J'ai mis à jour le code ci-dessus. – KyleFarris

Questions connexes