2009-10-27 5 views
0

Je viens de commencer à apprendre Jquery et je suis nouveau à l'écriture javascript (je suis trop vieux pour écrire noob, il se sent mal).comment récupérer une valeur href à partir du lien qui a ouvert une boîte de dialogue Jquery UI

Scénario: J'ai un lien hypertexte qui ouvre une boîte de dialogue et définit un cookie. La boîte de dialogue demande quelque chose comme "voulez-vous visiter cette page êtes-vous sûr?" Il a des boutons Oui/Non dessus.

Si l'utilisateur clique sur Oui, j'aimerais que le script récupère le lien cliqué à l'origine et se rende sur cette page. Je l'ai fait en récupérant la valeur du cookie. Bien que cela fonctionne je suis sûr que je pourrais le faire avec une variable mais je ne sais pas comment la boîte de dialogue est dans une fonction séparée. Donc, ma question: Puis-je utiliser la variable qui définit le cookie et le lier au bouton Oui dans le dialogue? A quoi ressemblerait la syntaxe?

merci à l'avance

Hairby

code

est inférieur

<script type="text/javascript" language="javascript"> 
$(document).ready(function() { 
$("a").click(function() { 
     var cookieset = $(this).attr("href"); 
     $.cookie("redirectcookie", cookieset, { path: '', expires: 7 }); 
     $('#dialog').dialog('open'); 
        $(".ui-dialog-titlebar-close").hide(); 
        return false;   

}); 

$('#dialog').dialog({ 
        autoOpen: false, 
        width: 600, 
        buttons: { 
         "Yes": function() { 
       window.location = 'http://www.mysite.com'+ $.cookie("redirectcookie")  
        }, 
         "Cancel": function() { 

         } 
        } 

       }); 
    }); 
    </script> 

Répondre

1

Il est le method option vous pouvez utiliser , pour ajouter les boutons lorsque le lien est cliqué au lieu de les ajouter lors de la création de la boîte de dialogue:

$("a").click(function() { 

    var $link = $(this); 

    $('#dialog').dialog('option', 'buttons', { 
     "Yes": function() { 
      window.location = $link.attr("href");   
     }, 
     "Cancel": function() { 
      $('#dialog').dialog('close'); 
     } 
    }); 

    $('#dialog').dialog('open'); 
    $(".ui-dialog-titlebar-close").hide(); 
    return false; 
}); 


$('#dialog').dialog({ 
    autoOpen: false, 
    width: 600 
}); 

Remarque, j'ai sauvé "$ (this);" dans une variable appelée "$ link", parce que "this" a une autre signification, à l'intérieur des fonctions de rappel, il pointe vers l'objet de dialogue.

EDIT:
Ce qui se passe est le suivant: Lorsque le document est prêt «un » obtient sélectionné un clic-fonction est lié. La fonction elle-même n'est pas exécutée, mais le sera lorsque l'utilisateur cliquera sur le lien. Deuxièmement, toujours dans l'événement ready, "#dialog" est sélectionné et une nouvelle boîte de dialogue est créée. Le seul argument est un objet qui contient les deux propriétés "autoOpen" et "width". C'est tout, prêt est fait.
Lorsque l'utilisateur clique maintenant sur le lien, la fonction donnée est exécutée. Il fait les choses suivantes:

  1. enregistrer une référence à « ce », quel est le lien cliqué. Remarque, j'ai sauvegardé "$ (this)" au lieu de "this" et j'ai donc nommé la variable "$ link" au lieu de "link". C'est une sorte de convention jQuery.
  2. définir l'option "boutons" dans la boîte de dialogue. L'argument est un objet, qui contient les propriétés "Oui" et "Annuler" et la valeur de ces deux est une fonction qui sera appelée quand ils sont cliqués. Le premier change l'emplacement pour les liens 'href, le second ferme la fenêtre
  3. "dialogue (' open ')" ouvre la boîte de dialogue.
  4. « .ui-dialogue-titlebar-close » qui est caché
  5. les fonctions de clic renvoie false, donc si des liens href est pas exécuté
+0

Cela fonctionne bien et met ce que je l'avais fait à la honte. Donc, dans les termes idiots, lorsque l'utilisateur clique sur le lien hypertexte, la variable "lien" est créé qui est le lien hypertexte et les boutons sont créés. La fonction yes contient l'emplacement Windows qui est l'attribut de variable de lien "href". J'ai également ajouté ma création de cookie et cela a fonctionné. merci beaucoup, j'ai beaucoup à apprendre! –

+0

@hairbymaurice: Oui, vous l'avez. J'ai également mis à jour ma réponse et décrit ce qui se passe étape par étape –

Questions connexes