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ď č. 1Nakoniec 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";
}