我从绑定到表格行的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)的调用有关吗?
答案 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" );
它对我有用。