Phaster
Power Member
boas
tenho uma página que aquando o click de um botão faz uma chamada ao servidor, retorna uma string em json e cria um "nível" de uma árvore adicionado elementos ao DOM, baseada em <ul> e <li>, tudo isto com javascript, no entanto se o servidor demorar um pouco mais a responder e/ou o user clique uma vez no botão e passado um pequeno instante carregue novamente, este efectua 2 chamadas do webservice seguidas.
como é que impeço o user de clicar 2 vezes no mesmo botão/imagem enquanto a função que adiciona elementos ao DOM corre?
html
javascript
tenho uma página que aquando o click de um botão faz uma chamada ao servidor, retorna uma string em json e cria um "nível" de uma árvore adicionado elementos ao DOM, baseada em <ul> e <li>, tudo isto com javascript, no entanto se o servidor demorar um pouco mais a responder e/ou o user clique uma vez no botão e passado um pequeno instante carregue novamente, este efectua 2 chamadas do webservice seguidas.
como é que impeço o user de clicar 2 vezes no mesmo botão/imagem enquanto a função que adiciona elementos ao DOM corre?
html
Código:
<asp:Button ID="Button1" runat="server" Text="Button" onclientclick="Get_Tema(); return false;"/>
Código:
function Get_Tema() {
if (document.getElementsByTagName("html")[0].className.indexOf("mymodal_is_here") > -1)
return;
var html = document.getElementsByTagName("html")[0];
if (html.className) {
html.className += " mymodal_is_here";
}
var service = new WebJSON;
service.GetTema(SuccessCallback_Get_Tema, OnfailureCallback_Get_Tema);
html.className = html.className.replace("mymodal_is_here", "");
};
//returns output from service
function SuccessCallback_Get_Tema(Resultado) {
//displaying output on alertbox
//alert(Resultado);
var colleccao = JSON.parse(Resultado);
var lista_tema = document.createElement("ul");
lista_tema.setAttribute("class", "lista-sem-bullets");
for (var i = 0; i < colleccao.length; i++) {
var elemento_tema = document.createElement("li");
var elemento_tema_imagem_esconde_mostra = document.createElement("img");
var elemento_tema_imagem_no = document.createElement("img");
var elemento_tema_link = document.createElement("a");
if (colleccao[i].FILHOS > 0) {
elemento_tema_imagem_esconde_mostra.src = "Content/Images/img_abrir_22_22.png";
} else if (colleccao[i].FILHOS = 0) {
elemento_tema_imagem_esconde_mostra.src = "Content/Images/seta_dir_26_20.png";
}
elemento_tema_imagem_esconde_mostra.addEventListener("click", Get_Feat, false);
elemento_tema_imagem_no.src = "Content/Images/tema.png"
elemento_tema_link.setAttribute("MNID", colleccao[i].MNID);
elemento_tema_link.innerText = colleccao[i].NAMEDESC
elemento_tema.appendChild(elemento_tema_imagem_esconde_mostra);
elemento_tema.appendChild(elemento_tema_imagem_no);
elemento_tema.appendChild(elemento_tema_link);
lista_tema.appendChild(elemento_tema);
}
document.getElementById("cphConteudo_divarvore").appendChild(lista_tema);
}
//returns the error after WCF service failed to execute
function OnfailureCallback_Get_Tema(error) {
//displaying error on alert box
alert(error);
};