2016-09-14 5 views
0

В моих веб-страниц у меня есть индикатор занятости, как это:отключить индикатор занятости на HREF, если OnClick возвращает ложное

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

Я не понимаю - если привязанный тег имеет атрибут href, а href - действительный URL-адрес, тогда поведение по умолчанию для браузера в этом месте. Зачем ему возвращать ложь? –

ответ

0

я, наконец, нашел потрясающий легкий и хорошо работающее решение по себе:

window.onbeforeunload = showBusysign; 

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

:-)

В случае может быть полезно для калиток программистов, это весь мой сценарий:

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

 Смежные вопросы

  • Нет связанных вопросов^_^