问题描述
|
我的繁忙加载指示器基本上可以通过检测点击来工作。但是,我刚刚指出,当我在某个项目上单击鼠标中键时,它将在新选项卡中打开一个链接,然后加载指示符将永远显示。如何告诉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();
}
}
解决方法
您可以尝试,但在所有浏览器上都无法正常运行。
本页介绍了哪些浏览器支持通过JS禁用鼠标中键。 Firefox不是其中之一...
, 另一个选择是将单击事件的作用域限定为仅对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();
});