2013-09-24 1 views
1

J'utilise Bootstrap Tour pour construire une visite plutôt restrictive dans laquelle l'utilisateur ne peut passer à l'étape suivante qu'après avoir passé 3 secondes sur l'étape en cours.Désactiver temporairement le bouton 'Suivant' dans Bootstrap Tour

Pour le faire, je lui ai donné le bouton « Suivant » un id nextBtn dans le modèle de la tournée, et espère que je peux activer/désactiver comme ceci:

var tour = new Tour ({ 
    name: "my-tour", 
    template: "...", 
    onNext: function(tour) { 
     $("#nextBtn").prop("disabled", true); 
    }), 
    onShow: function(tour) { 
     window.setTimeout(next, 3000); 
    }); 

function next() { 
    $("#nextBtn").prop("disabled", false); 
} 

Cependant, cela ne fonctionne pas . Quelle devrait être la bonne approche ici?

+1

faute de frappe '$ ("# nextBtn) '' changer $ (" # nextBtn") 'vous avez oublié de fermer citations –

+0

@TusharGupta, désolé de la faute de frappe, mais ne fonctionne toujours pas – MLister

+0

Que signifie "ne fonctionne pas"? Est-ce que le bouton n'est pas désactivé? N'at-il pas réactivé? N'affiche-t-il pas un hippopoatamus dansant que vous attendez? – Becuzz

Répondre

3

Il y a quelques fautes de frappe, mais le problème principal est que vous devez utiliser le bon sélecteur pour accéder au bouton "Suivant", ce n'est pas #nextBtn, mais c'est une imbrication des classes $(".popover.tour-tour .popover-navigation .btn-group .btn[data-role=next]").

En cas onShow et onNext le popover est Accessibile pas parce que boostrap détruire et recréer, l'événement est correct onShown:

fonction à exécuter juste après chaque étape est affichée.

code:

var timer; 
var tour = new Tour({ 
    onShown: function (tour) { 
     $(".popover.tour-tour .popover-navigation .btn-group .btn[data-role=next]").prop("disabled", true); 
     timer=window.setTimeout(next, 3000); 
    } 
}) 

function next() {  
    $(".popover.tour-tour .popover-navigation .btn-group .btn[data-role=next]").prop("disabled", false); 
    window.clearTimeout(timer); 
} 

tour.addStep({ 
    element: "#one", 
    title: "Step 1", 
    content: "Content for step 1" 
}) 

tour.addStep({ 
    element: "#two", 
    title: "Step 2", 
    content: "Content for step 2" 
}) 

tour.addStep({ 
    element: "#three", 
    title: "Step 3", 
    content: "Content for step 3" 
}) 

tour.start() 

Démo: http://jsfiddle.net/IrvinDominin/3YY7Y/

+0

La question n'est pas t La sélection d'id, comme je l'ai explicitement défini l'ID du bouton «suivant» dans le modèle. L'inspection du code html généré à chaque étape montre clairement que le bouton 'suivant' a l'identifiant désiré. Le problème est que, pour une raison ou une autre, il y a un délai entre l'appel du rappel 'onShown' et quand le bouton' next' est prêt à être sélectionné. Donc, si je fais quelque chose comme: 'window.setTimeout (disableNext, 200);' inside 'onShown' (où à l'intérieur de disableNext', nous faisons' $ ("# btn_id"). Prop ("disabled", true); '), il désactivera le bouton (après un délai de 0,2 s). Je ne suis pas sûr que ce soit un bug dans bootstrap-tour. – MLister

+0

Vous ne publiez pas le templare alors j'ai utilisé la valeur par défaut; Pour l'événement, vous devez utiliser sur Afficher comme détaillé dans la réponse. –

Questions connexes