2011-06-06 30 views
1

我忙的加載指示器基本上是通過檢測點擊來工作的。但是,我剛纔注意到,當我中間點擊一個項目時,它會在新選項卡中打開一個鏈接,然後加載指示符將永遠顯示。我怎麼能告訴JS忽略鼠標中鍵?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(); 
     } 
    } 
+0

您是否想竊取中間點擊在新標籤頁中打開,還是你想你的進步加載指示器在使用中間點擊時不會被觸發? – Phrogz 2011-12-16 00:35:42

回答

1

您可以嘗試使用,但它不適用於所有瀏覽器。

This page描述了哪些瀏覽器支持通過JS禁用鼠標中鍵。火狐不是其中之一...

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