jquery fancybox触发点击只工作一次

时间:2010-01-10 18:42:07

标签: javascript jquery events click fancybox

我从绑定到表格行的click事件调用jquery.fancybox链接。该动作第一次正常,但是,如果我关闭fancybox并再次单击任何行,绑定到该行的匿名函数仍然会触发,但fancybox无法启动。这是我正在使用的javascript:

$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");
  });

});

所以,然后在HTML中我将锚点归类为“编辑”:

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

我总能看到警告框,我可以将trigger / click()调用更改为remove(),它将“工作”,多次删除锚点。我也可以反复手动点击$('。edit')链接本身,这一切都很好。

那么当从行点击事件轮流进行时,锚定点击事件仅触发一次是怎么回事?这与我在描述函数时对$(this)的调用有关吗?

7 个答案:

答案 0 :(得分:4)

试一试:

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

    return false;
});

或者,您可以这样做:

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

    return false;
});

希望有所帮助!

答案 1 :(得分:0)

试试这个来调试

$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");
    }
});

如果一切正常,那么您可以将其简化为

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

答案 2 :(得分:0)

我的猜测是fancybox试图在没有click事件的情况下显示。在fancybox显示之后,你会触发fancybox之外的点击,在它有机会显示之前关闭它。将fancybox链接放在表格之外,然后在单击tr时,触发锚点击,这将弹出打开的花式框。

如果此问题仍然存在,您可能需要在fancybox库中抛出一些调试语句来追踪问题。

答案 3 :(得分:0)

你解决了这个问题吗?如果没有,有一个棘手的方法来解决这个问题。我认为当你打开一次并关闭盒子时,'trigger()'方法将被解除绑定。我在每次点击事件中都添加了隐藏元素:

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

希望这有帮助

答案 4 :(得分:0)

Tuffkid让它运转起来; 我正在努力解决这个问题,我得出了同样的结论;无论如何,只是分享。

载入时:

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

JS功能:

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

答案 5 :(得分:0)

jquery fancybox触发器只能工作一次..

通常我们使用这样的$(“。fancybox”)。触发器('click');但它不能正常工作。

只需改变你的tigger ......它为我工作......

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

首先找到fancybox然后触发它

答案 6 :(得分:0)

我确实添加了

display: inline-block

之后

elem.removeData( "fancybox" ); 

它对我有用。