Индикатор загрузки JS Busy игнорирует средний щелчок - PullRequest
1 голос
/ 07 июня 2011

Мой индикатор загруженности в основном работает, обнаруживая щелчки. Тем не менее, я только что заметил, что, когда я щелкаю средний элемент, он открывает ссылку на новой вкладке, а затем индикатор загрузки появляется навсегда. Как я могу сказать 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 ]

1 голос
/ 07 июня 2011

Вы можете попробовать, но это не очень хорошо работает со всеми браузерами.

На этой странице описано, какие браузеры поддерживают отключение средней кнопки мыши через JS.Firefox не один из них ...

0 голосов
/ 13 августа 2011

Другой вариант заключается в том, чтобы область событий клика работала только на AJAX ссылках / кнопках.

Например (переписывание только с помощью jQuery, потому что без него я безнадежен):

// 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();
});
...