我的网页可与大量由用户上传的数据一起使用,由服务器处理,然后返回。有时,用户需要过滤部分数据,因此服务器仅处理该数据的一个子集。因此,我的网页具有一个不错的"过滤器"按钮,该按钮按照客户端的状态过滤。
长话短说:我的客户希望能够中点击该按钮,以便在新标签中打开。(有些实际上使用右键单击 ->"在新标签中打开",因此也必须支持)
我是让用户决定如何打开其链接的忠实信徒,因此我不希望此过滤器按钮自动打开新窗口。但是我不能将其转换为[href]链接,因为我需要先运行JS过滤器。
所以问题变成了,如何在打开之前建立一个运行一些代码的链接?
编辑:使用鼠标点击事件的下面的解决方案对于使用右键单击 在新选项卡中打开的用户将失败,这在我的用户中很常见(事实证明)。我已经相应地更新了这个问题。
使用按钮,捕获单击事件,您可以在其中放置过滤器逻辑,然后打开新选项卡。您始终可以使用CSS使其看起来像按钮或链接样式。
您可以在如何使用鼠标中间单击中看到这一点。
您可以尝试以下方法:
$("button").on('mousedown', function(e) {
if(e.which == 1) {
//Left button clicked
}else if(e.which == 2) {
//Middle button clicked
} else if(e.which == 3) {
//Right button clicked
}
});
您可以使用简单的onclick
,然后在JavaScript中使用event.button
查看单击哪个鼠标按钮。这返回代表鼠标按钮的整数值。0是标准(通常为左)单击,1用于中间鼠标按钮(您想要什么),右键为2。这也允许重新配置指向设备,因此它将使用设置的任何密钥作为中间鼠标按钮,而不是在使用物理中间按钮时触发。
您可以在https://developer.mozilla.org/en/dom/event.button
上阅读有关event.button
的更多信息。编辑:
可能还值得使用event.preventDefault()
方法,因此它不会在新标签中打开链接(例如)。但是,如果您使用此功能,则必须手动打开链接。
您可以使用JavaScript使用以下想法。
html:
<a href="javascript:void(0);" onclick="clickMe();">Click Me</a>
JavaScript:
function clickMe() {
//Do here whatsever you want
var test = "test";
alert(test);
var link = "mylink/whatsever-query-string";
/// Use this if you want open link in self window
// window.location.href = "mylink/whatsever-query-string";
/// Use this if you want open link in new window
window.open(link, "", 'width=500, height=600, toolbar=no,location=no, resizable=yes,scrollbars=yes, directories=no,status=no, titlebar=no');
/// Use this if you want open link in new tab
// window.open(link, '_blank');
}
演示小提琴
编辑:对于鼠标中,单击您可以使用以下类似的内容,
html :
<div onmousedown="WhichButton(event)">ClickMouse</div>
javascript :
function WhichButton(event) {
var x = event.buttons;
if (x == 4) {
var test = "test";
alert(test);
window.open('', '_blank');
}
}
demo
对于经过此处的任何人,我确实找到了解决方案:我保留了浏览器本地存储中所需的所有过滤数据。当用户打开链接时,它将他重定向到一个页面,该页面知道要查看本地存储并在存储的数据上运行逻辑,然后再次将他重定向到正确的位置。
这不是理想的:如果用户试图通过直接从A HREF复制链接来共享链接,则该链接在另一个用户的计算机上无法使用(尽管我可以在这种情况下显示警告)。但是,如果用户单击链接,然后共享新的打开链接,则它将起作用,因此我将此解决方案标记为"足够好"。