简体   繁体   English

JS忙加载指示器忽略中间点击

[英]JS Busy loading indicator ignore middle click

My busy loading indicator basically works by detecting clicks.我的繁忙加载指示器基本上是通过检测点击来工作的。 However, I just noted that when I middle click an item, it opens a link in a new tab and then the loading indicator shows up forever.但是,我刚刚注意到,当我中间单击一个项目时,它会在新选项卡中打开一个链接,然后加载指示器会永远显示。 How can I tell JS to ignore the middle mouse button?如何告诉 JS 忽略鼠标中键?

 window.onload = setupFunc;

     function setupFunc() {
       document.getElementsByTagName('body')[0].onclick = clickFunc;
       hideBusysign();
         Wicket.Ajax.registerPreCallHandler(showBusysign);
         Wicket.Ajax.registerPostCallHandler(hideBusysign);
         Wicket.Ajax.registerFailureHandler(hideBusysign);
     }

     function hideBusysign() {
       document.getElementById('busy').style.display ='none';
     }

     function showBusysign() {
       document.getElementById('busy').style.display ='inline';
     }

     function clickFunc(eventData) {
       var clickedElement = (window.event) ? event.srcElement : eventData.target;
       if (clickedElement.tagName.toUpperCase() == 'BUTTON' || clickedElement.tagName.toUpperCase() == 'A' || clickedElement.parentNode.tagName.toUpperCase() == 'A'
         || (clickedElement.tagName.toUpperCase() == 'INPUT' && (clickedElement.type.toUpperCase() == 'BUTTON' || clickedElement.type.toUpperCase() == 'SUBMIT'))) {
         showBusysign();
       }
     }

You can try to, but it won't work very well with all browsers.您可以尝试,但它不适用于所有浏览器。

This page describes what browsers support disabling the middle mouse button via JS.本页介绍了哪些浏览器支持通过 JS 禁用鼠标中键。 Firefox is not one of them... Firefox 不是其中之一...

Another option is to scope the click events to only work on AJAX links/buttons.另一种选择是 scope 点击事件仅适用于AJAX链接/按钮。

For instance (rewriting with jQuery only b/c I'm hopeless without it):例如(仅用 jQuery 重写 b/c 没有它我没有希望):

// On load
$(function() {
  Wicket.Ajax.registerPreCallHandler(showBusysign);
  Wicket.Ajax.registerPostCallHandler(hideBusysign);
  Wicket.Ajax.registerFailureHandler(hideBusysign);
});    

// Assuming you add an "ajax" class to all appropriate markup (in Wicket)

// .live would be appropriate, too
$('body').delegate('a.ajax, input:button.ajax, input:submit.ajax', 'click', function(){
  showBusysign();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM