/ / deaktivovať indikátor obsadenosti na href, ak onclick vráti false - css, onclick, busyindicator

vypnúť indikátor obsadenia na href, ak onclick vráti falošný - css, onclick, busyindicator

Na svojich webových stránkach mám indikátor obsadenosti, ako je tento:

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

(Pre zjednodušenie som odstránil časť pre žiadosti ajax)

Problém je v tom: Ak existuje odkaz <a href = ... onclick = ... a onclick vráti false, potom sa href „nespustí“, ale indikátor obsadenosti sa rozsvieti (a už nezhasne). .

Zmenil som to

clickedElement.tagName.toUpperCase() == "A"

na

(clickedElement.tagName.toUpperCase() == "A"
&& ! clickedElement.hasAttribute("onclick"))

ale nejde o vážne riešenie, pretože predpokladá, že odkazy s atribútom onclick nikdy nepôjdu za href.

Existuje možnosť všeobecne vedieť, či onclick vráti true alebo false, napr. ak bude požadovaný href alebo nie?

odpovede:

0 pre odpoveď č. 1

Nakoniec som sám našiel ohromujúce ľahké a dobre fungujúce riešenie:

window.onbeforeunload = showBusysign;

function showBusysign() {
document.body.style.cursor="progress";
}

:-)

V prípade, že to môže byť užitočné pre programátorov integrovaných obvodov, je to celý môj skript:

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";
}