2010-01-10 8 views
4

J'appelle un lien jquery.fancybox à partir de l'événement click lié à une ligne de table. L'action fonctionne bien la première fois, cependant, si je ferme la fancybox et que je clique de nouveau sur n'importe quelle ligne, la fonction anonyme liée à la ligne se déclenche toujours, mais fancybox ne démarre pas. Voici le javascript j'utilise:jquery fancybox déclenché cliquer ne fonctionne qu'une fois

$jq(document).ready(function() { 

    $jq('a.edit').fancybox({ 
    'overlayShow': true, 
    'hideOnContentClick': false 
    }); 

    $jq('tr').click(function() { 
    alert("clicked"); 
    $jq(this).find('a.edit').trigger("click"); 
    }); 

}); 

Ainsi donc dans le code HTML je ancres classés comme « modifier »:

<tr> 
    <td>...</td> 
    <td> 
    <a href="/candidates/22/qualifications/16/edit" class="edit">edit</a> 
    </td> 
</tr> 

je peux toujours voir la zone d'alerte, et je peux changer la trigger/click() appelle remove() et cela va "fonctionner", supprimant les ancres à plusieurs reprises. Je peux aussi cliquer plusieurs fois manuellement sur le lien $ ('. Edit') et tout va bien. Alors, comment se fait-il que l'événement de clic d'ancrage ne se déclenche qu'une fois lorsqu'il vient à son tour de l'événement de clic de ligne? Est-ce quelque chose à voir avec l'appel que je fais à $ (ceci) quand je décris la fonction?

+0

peut-être ne peut pas trouver le « a.edit » dans la deuxième exécution? avez-vous essayé de sortir '$ jq (this) .find ('a.edit'). length'? – naivists

Répondre

0

Essayez ceci pour déboguer

$jq('tr').click(function() { 
    // Step 1: make sure the following expression is actually returning elements 
    var elements = $jq(this).find('a.edit'); 

    if (elements.length) { 
     // Step 2: Just use the `click` method to trigger the event 
     alert("Found " + elements.length + "elements"); 
     elements.click(); 
    } else { 
     alert("No elements found"); 
    } 
}); 

Si tout cela fonctionne, vous pouvez simplifier à

$jq('tr').click(function() { 
    $jq(this).find('a.edit').click(); 
}); 
+0

merci pour votre suggestion. J'ai couru le script que vous avez posté, mais le même comportement persiste. Après chaque clic, il alertera: "Found 1elements". Mais il ne lancera le fancybox que lors du premier clic, quel que soit le que je clique sur; par la suite, seule la boîte de dialogue de débogage s'affiche. C'est mystérieux pour moi parce que je peux cliquer sur les ancres à volonté et ça marche à chaque fois. (Mon but, cependant, est de rendre l'ancre invisible et de déclencher l'événement click de la ligne onclick.) Que fait fancybox pour les événements click de ces ancres? –

+0

Je ne suis pas familier avec le plugin fancybox –

0

Je pense que fancybox tente de montrer sans l'événement click. Après les fancybox shows, vous déclenchez un clic en dehors de fancybox qui le ferme avant qu'il ait une chance de s'afficher. Mettez le lien fancybox en dehors de la table, puis lorsque vous cliquez sur tr, déclenchez le clic d'ancrage qui ouvrira la boîte fantaisie.

Si ce problème persiste, vous pouvez lancer des instructions de débogage dans la bibliothèque fancybox pour localiser le problème.

0

Avez-vous résolu ce problème? Si ce n'est pas le cas, il y a une manière délicate de résoudre cela. Je pense que la méthode 'trigger()' sera détachée quand vous ouvrez une fois et fermez la boîte. J'ai ajouté des éléments cachés tous les événements de clic:

function openPopup(url) { 
    $("body") 
    .append("<a style='display:none'></a>") 
    .fancybox({ 
     'href' : url 
    }) 
    .trigger('click'); 
} 

Hope this helps

0

Tuffkid a fonctionner; Je travaillais sur quelque chose pour résoudre ce problème aussi et je suis arrivé à la même conclusion qu'il a faite; juste partager, de toute façon.

On charge:

$(document).ready(function(){ 
    $('#show').click(function(e){ 
     showPopUp($(this)); 
    }); 
}); 

JS Fonction:

function showPopUp(obj){ 
    obj.fancybox({  
     'href' : 'page.php', 
     'onCleanup': function(){ 
      $(this).click(function(e) { showPopUp($(this)); }); 
    } 
      }); 
} 
4

Donnez ce un coup:

$jq('a.edit').live('click',function(){ 
    $.fancybox('<div>Here is the content</div>'{ 
     overlayShow: true, 
     hideOnContentClick: false 
    }); 

    return false; 
}); 

Sinon, vous pouvez faire:

$jq('a.edit').live('click',function(){ 
    $.fancybox({ 
     href: 'some-page.html' 
     overlayShow: true, 
     hideOnContentClick: false 
    }); 

    return false; 
}); 

Espérons que ça aide!

0

jquery fancybox déclencheur de travail qu'une seule fois ..

Normalement, nous avons l'habitude comme ça $ ("fancybox") déclenchement (clic). mais ça ne fonctionne pas correctement.

il suffit de changer votre Tigrou comme ça ... son travail pour moi ...

$(".fancybox").fancybox().trigger('click'); 

Voici tout d'abord trouver le fancybox puis le déclencher