可以't对同时具有.thoggle()函数的元素启动FancyBox
Can't fire FancyBox on an element that also has a .toggle() function
我遇到了一个奇怪的问题,似乎无法解决。我试着在SO和其他网站上搜索,但似乎无法解决这个愚蠢的问题。
这是我的问题-我正在使用FancyBox通过AJAX加载一些页面。我做得很好。
我还有一些元素使用.toggle();
将其类更改为"active"以更改样式。
两人各自工作都很好。问题是,我有一个标志图标,它应该加载一个FancyBox实例,同时它需要向图标添加一个"active"类。其想法是,一旦保存了表单,就会应用一个标志,用户就会知道有一个标志与该数据位相关。
这是我的JS代码:
$('.activate').toggle(function() {
$(this).addClass('active');
}, function() {
$(this).removeClass('active');
});
$('.activate.active').toggle(function() {
$(this).removeClass('active');
}, function() {
$(this).addClass('active');
});
$('.popup').fancybox({
autoDimensions: true,
modal: true
});
您看到的是两个独立的函数,它们可以打开/关闭类(其中一些元素将加载为活动元素,这就是为什么有两个函数)。
这是我的HTML:
<a class="activate popup fancybox.ajax icon flag" href="flag-rock.aspx">text</a>
"active"类加载toggle函数,"popup"类加载FancyBox函数,"FancyBox.ajax"告诉FancyBox通过ajax加载内容。"icon"answers"flag"只是设置锚的样式。
所以,这是我的交易。如果我移除"活动"的FancyBox有效,否则,我会得到类的切换,但不会触发FancyBox。我也没有在firebug或Chrome的开发工具中得到任何错误。
我甚至尝试过这样的东西:
$('.activate').toggle(function() {
$(this).fancybox({
autoDimensions: true,
modal: true
}).addClass('active');
}, function() {
$(this).removeClass('active');
});
发生的情况是,图标会使类处于活动状态,但不会激发FancyBox。如果我再次单击它,它确实会激发FancyBox,但只有在该元素被单击两次之后。
您可以在此处查看页面:http://ec2-50-16-99-3.compute-1.amazonaws.com/aptify/rocks/global-rocks.aspx单击数据行右侧的"标志"图标。
有什么想法吗?
解决方案
好的,所以感谢下面每个人的帮助,这里是适用于我的解决方案。
jQuery:
$('.popup, .active').fancybox({
autoDimensions: true,
modal: true
});
$('.activate').click(function()
{
$(this).toggleClass('active off');
event.preventDefault()
});
HTML:
<a class="activate off fancybox.ajax icon flag" href="flag-rock.aspx">Stuck Rock</a>
''
preventDefault()
在没有打开标志的情况下阻止超链接工作。否则,你会在窗口中加载传统的页面,这不是我们想要的。
可能有更好的方法可以做到这一点,但这就是我所知道的解决打开标志时页面加载问题的全部方法。
我认为你应该在文档中只应用一次fancybox。ready
此外,你应该调查http://api.jquery.com/toggleClass/为你的班级切换。
但我认为你真正想要的是onStart和onClosed事件来切换你的标志。这样,当页面在花式框中打开时,您的标志就会处于活动状态。
试试这样的东西:
$(function(){
$('#fancything').fancybox({
autoDimensions: true,
modal: true
});
$('.activate').click(function(){
$(this).addClass('active').removeClass('popup fancybox.ajax')
});
});
在click
事件处理程序之前设置fancybox,以便它可以进行第一次单击,怎么样?您在第一次单击时设置fancybox,以便在第二次单击时做好准备,只需在元素上运行fancybox
插件,同时通过.toggle()
:绑定click
事件处理程序
$('.activate').fancybox({
autoDimensions: true,
modal: true
}).toggle(function() {
$(this).addClass('active');
}, function() {
$(this).removeClass('active');
});
我刚刚测试了这个,当我在你的页面上运行这个代码时,它会在第一次点击标志图标时弹出显示。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- jquery点击函数select&取消选择
- 如何将.show()更改为.thoggle()而不复制函数中的项(如何重构)
- .thoggle()函数在内联中添加溢出隐藏
- 为什么.thoggle不适用于第一个函数
- 可以't对同时具有.thoggle()函数的元素启动FancyBox
- .thoggle()函数不起作用