在我的网页中,我有一个像这样的忙碌指示符:
window.onload = setupFunc;
function setupFunc() {
document.getElementsByTagName('body')[0].onclick = clickFunc;
hideBusysign();
}
function hideBusysign() {
document.body.style.cursor='default';
}
function showBusysign() {
document.body.style.cursor='progress';
}
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')))
&& clickedElement.parentNode.id.toUpperCase() != 'NOBUSY' ) {
showBusysign();
}
}
(为了简单起见,我删除了ajax请求的部分)
问题是:如果有一个链接< a href = ... onclick = ...并且onclick返回false,那么href不会被执行",但繁忙的指示符会消失在(并且不再发生)。
我已经改变了
clickedElement.tagName.toUpperCase() == 'A'
到
(clickedElement.tagName.toUpperCase() == 'A'
&& ! clickedElement.hasAttribute("onclick"))
但这不是一个严肃的解决方案,因为它假定带有onclick属性的链接永远不会用于href。
是否有可能以通用的方式知道,如果onclick将返回true或false,例如如果要求href?
答案 0 :(得分:0)
我终于找到了一个非常简单易用的解决方案:
window.onbeforeunload = showBusysign;
function showBusysign() {
document.body.style.cursor='progress';
}
: - )
如果它对wicket程序员有帮助,这是我的整个脚本:
window.onload = setupFunc; // for ajax requests
window.onbeforeunload = showBusysign; // for page requests
function setupFunc() {
Wicket.Event.subscribe('/ajax/call/beforeSend', function( attributes, jqXHR, settings ) {
showBusysign()
});
Wicket.Event.subscribe('/ajax/call/complete', function( attributes, jqXHR, textStatus) {
hideBusysign()
});
}
function hideBusysign() {
document.body.style.cursor='default';
}
function showBusysign() {
document.body.style.cursor='progress';
}