防止默认在花哨框的锚链接上不起作用
prevent Default not working on anchor link for fancy box
我在下面的代码中遇到了花哨的盒子问题,链接仍在通过YouTube。花哨的框开始"弹出",但随后页面会引导YouTube链接。
杰奎里
$("a.youtube-link").click(function(e) {
e.preventDefault();
$.fancybox({
'padding' : 0,
'showCloseButton': false,
'title' : this.title,
'href' : this.href.replace(new RegExp("watch''?v=", "i"), 'v/') + '?showinfo=0',
'type' : 'swf',
'swf' : {
'wmode' : 'transparent',
'allowfullscreen' : 'true'
}
});
return false;
});
网页代码
<div class="img-wrap">
<a href="http://www.youtube.com/watch?v=videoid" class="img-link youtube-link" target="_self">
<img src="link-to-imv" alt="">
</a>
</div>
任何帮助表示赞赏。
尝试添加 stopPropagation() 也以阻止事件的冒泡。
$("a.youtube-link").click(function(e) {
e.preventDefault();
e.stopPropagation();
$.fancybox({
'padding' : 0,
'showCloseButton': false,
'title' : this.title,
'href' : this.href.replace(new RegExp("watch''?v=", "i"), 'v/') + '?showinfo=0',
'type' : 'swf',
'swf' : {
'wmode' : 'transparent',
'allowfullscreen' : 'true'
}
});
return false;
});
,你有一个花哨的盒子,所以你很可能有一个动态生成的锚链接,如果是这种情况,那么你必须将事件委托给最近的静态父级或document
:
$(document).on("click", "a.youtube-link", function(e) {
尝试使用事件委派。
问题是:
$('a').on('click touchend', function(e) {
var el = $(this);
var link = el.attr('href');
window.location = link;
});
以上是在我的js文件中,以帮助处理iOS触摸事件,将其删除可以解决问题。
就做这样的事情
<a href="#" class="img-link youtube-link" target="_self">
然后将绝对值添加到 js 代码中的 href
看起来你的函数永远不会达到它返回 false 的点。
尝试解绑你是一个元素,然后将其绑定到你的函数:
$(document).off("click", "a.youtube-link");
然后:
$(document).on("click", "a.youtube-link", function(){
$.fancybox({
'padding' : 0,
'showCloseButton': false,
'title' : this.title,
'href' : this.href.replace(new RegExp("watch''?v=", "i"), 'v/') + '?showinfo=0',
'type' : 'swf',
'swf' : {
'wmode' : 'transparent',
'allowfullscreen' : 'true'
}
});
return false;
});
此外,请检查控制台是否存在任何 JavaScript 错误,并在返回 false 时放置断点以检查它是否已触发。
只有在 Safari 上以"独立 Web 应用程序"模式访问我的网站时,我才遇到同样的问题(该网站作为应用程序固定到用户主屏幕)。
原来是由于我从原始网站模板继承的以下代码:
/******************************************** Prevent links in standalone web apps opening Mobile Safari *****************************************/
if (("standalone" in window.navigator) && window.navigator.standalone) {
jQuery('a').on('click', function(e){
e.preventDefault();
var new_location = jQuery(this).attr('href');
if (new_location != undefined && new_location.substr(0, 1) != '#' && jQuery(this).attr('data-method') == undefined){
window.location = new_location;
}
});
}
我想添加这个答案来帮助其他人,他们可能在他们的 JS 中埋藏着类似的代码并且不知道要寻找什么。
该代码做了它应该做的事情,它允许用户导航链接而无需将它们踢到新的 Safari 窗口中,但是当某些锚/链接附加了自定义 JavaScript 处理程序时,它会产生不必要的副作用。
我稍微修改了代码以帮助我处理这些情况:
/******************************************** Prevent links in standalone web apps opening Mobile Safari *****************************************/
if (("standalone" in window.navigator) && window.navigator.standalone) {
jQuery('body').on('click','a:not(.no-js)',function(e){
var new_location = jQuery(this).attr('href');
if (new_location != undefined && new_location.substr(0, 1) != '#' && jQuery(this).attr('data-method') == undefined && jQuery(this).attr('onclick') == undefined){
window.location = new_location;
}
});
}
我在其他地方有代码专门调用具有no-js
类的任何HTML元素preventDefault
。我在链接上使用此类,只有在浏览器不支持 Javascript 时才应遵循这些链接,因此我排除了此 onclick 函数处理的任何这些链接。我还添加了一个检查,如果单击的链接指定了自己的"onclick"属性,则不要导航/更新 window.location。
- 我的下拉菜单中的链接不起作用
- Ajax:Ajax响应中的链接不起作用
- jQuery Mobile到其他页面的锚链接不起作用
- 外部JavaScript链接不起作用
- 为什么我的动态更改链接不起作用?(Javascript)
- DOM事件链接不起作用
- javascript中最大字符数的链接不起作用
- jQuery高亮显示滚动导航链接不起作用
- 鼠标悬停导航链接不起作用
- 单击下拉菜单中的链接不起作用
- jQuery 链接不起作用
- 使用javascript的方法链接不起作用
- 具有另一个背景图像的图像上的链接不起作用
- AJAX 请求类似的链接不起作用
- 移动设备上的网站超链接不起作用
- JavaScript链接不起作用
- 谷歌地图自定义标记链接不起作用
- 铬错误或编码错误?目标页面中的锚/ID 链接不起作用
- 模式对话框内的链接不起作用
- IE javascript 书签let PDF 链接不起作用