如果onclick返回false,则在href上禁用忙指示

时间:2016-09-14 13:38:19

标签: css onclick busyindicator

在我的网页中,我有一个像这样的忙碌指示符:

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?

1 个答案:

答案 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';
}