undo-preventDefault()或以编程方式禁用链接集合的更好方法
undo preventDefault() or better way to programmatically disable collections of links
我有一个页面,其中包含网络状态的事件侦听器。当网络处于"脱机"状态时,我想禁用任何跨域链接以进入脱机模式。我试图使用.preventDefault()
,但当应用程序恢复在线时,我需要重新启用链接。
事件监听器
//check network status
if(!navigator.onLine) {
offlineLinks(); //Offline mode function
}
//add event listeners for network status
window.addEventListener('offline', function(e) {
offlineLinks(); //Offline mode function
}, false);
window.addEventListener('online', function(e) {
//need to re-enable links/Online mode
}, false);
window.addEventListener('error', function(e) {
alert('Error fetching manifest: there is a good chance we are offline.');
offlineLinks(); //Offline mode function
});
"去链接"功能
function offlineLinks() {
$('a[href^="http"]').click(function(e) {
e.preventDefault();
$('#offline-dialog').dialog({
modal: true,
buttons: {
Ok: function() {
$(this).dialog('close');
}
}
});
});
}
我正在寻找一个可扩展的解决方案,如果页面上有大量链接,它不会造成延迟。有没有一个简单的解决方案来逆转.preventDefault()
调用,或者有更好的方法来完成这项任务?
可能的解决方案
我最初的想法是要么存储一个href值数组,然后删除/添加。我一直在使用webdb
的HTML5存储。我可以为创建一个数据库并动态地点击hrefs。。。然而,我不确定这是否是最好的解决方案。
您似乎在使用jQuery,至少在链接处理程序部分是这样。
需要注意的是$.click(handler)只是.bind('click',handler)的简写。如果您在其他地方定义处理程序,您也可以稍后解除绑定,如下所示:
var handler = function(event) {
event.preventDefault();
console.log("the links, they do nothing!");
}
// when you want the external links to be inactive.
// you could use .click(handler) here too, it's the same.
$('a[href^="http"]').bind('click', handler);
// when you want them back
$('a[href^="http"]').unbind('click', handler);
顺便说一句,如果你只希望这种情况发生在外部链接上,href^="http"有点脆弱。内部链接可能以"http"开头,一些外部链接可能以其他协议(如"ftp")开头。最好给这样的链接提供自己的类,就像维基百科对"外部"所做的那样。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 如何使用jQuery自动打开页面上的所有链接
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- jquery动画可以通过编程链接吗
- 在单击href链接的同时下载文件
- 尽管链接成功并已成功下载,但未找到NPM模块
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 单击页面上的链接后高度发生变化
- 将纯文本URL转换为可单击链接
- python-selenium-点击上升链接
- 一点javascript元编程&可链接的设置器
- 如何使用Angular 2服务提供包含指向另一个资源的链接/ids的资源集合
- 链接与创建新集合 - 效率
- AngularJS 指令:使用包含/编译链接集合中的对象
- 通过控制台从网站获取链接集合
- 如何使用iron:router为集合中的每个项目创建一个单独的链接
- 当尝试按名称获取链接按钮时,获取HTML对象集合
- 转换 jQuery 对象中的 lodash/underscore 集合(链接)
- undo-preventDefault()或以编程方式禁用链接集合的更好方法