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

时间:2011-06-06 20:29:37

标签: javascript button mouse ignore

我的忙碌加载指示器基本上通过检测点击来实现。但是,我刚刚注意到,当我中间点击一个项目时,它会在新选项卡中打开一个链接,然后加载指示器将永久显示。如何告诉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();
       }
     }

2 个答案:

答案 0 :(得分:1)

您可以尝试,但它不适用于所有浏览器。

This page描述了哪些浏览器支持通过JS禁用鼠标中键。 Firefox不是其中之一......

答案 1 :(得分:0)

另一个选择是将点击事件的范围仅限于 AJAX 链接/按钮。

例如(仅使用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();
});