Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HenriqueDias

[Resolvido] Bloqueio de links... como fazer?

Recommended Posts

Pessoal,

 

É possível identificar que um link foi clicado para depois bloquear um outro link na mesma página?

 

Minha situação é a seguinte... tenho uma página com cerca de 10 links. Assim que clicar em um deles, gostaria de bloquear os demais links momentaneamente; isso somente enquanto a outra pagina não carrega completamente.

 

Sei que esse código bloqueia um link qualquer...

 

<a href="http://www.google.com" onclick="return false;">Teste</a>

 

... mas gostaria de aplicá-lo quando um outro link tiver sido clicado, como disse logo acima.

 

Preciso fazer isso porque alguns links demoram muito para abrir, e se eu clicar em algum outro logo em seguida, o Apache trava.

 

Creio que alguma função em JavaScript possa identificar um link clicado. Alguém pode me ajudar?

 

Antecipadamente, muito obrigado!

 

Henrique Dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que você pode fazer eh no onclick de cada colocar um função pra travar os links...tipo

 

a href="http://www.google.com" onclick="trava()">Teste</a>

ai ele muda o onclick de todos colocando return false....entendeu??

Compartilhar este post


Link para o post
Compartilhar em outros sites

HenriqueDias, bem vindo ao fórum Imasters.

 

Pra esse caso, tem certeza que é a melhor solução? Se o Apache tá travando, deve ter algum problema no servidor.

 

Mas em todo caso, pra você fazer algo com relação aos links, tente o seguinte: (Da forma que fiz só vai funcionar se você tiver acesso ao código-fonte das páginas que serão abertas).

 

- Identifique os links com ID's;

- Crie uma função e chame a mesma no evento onClick de cada link;

- Essa função deverá receber como parâmetro o objeto clicado;

- Use um for que pegue os links necessários e atribua um return false. Assim todos os links ficarão 'inativos';

- A janela será aberta, quando ela terminar de carregar, vai ativar outra função, que definirá return true para os links;

 

Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Página principal</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<script>
	function bloqueiaLinks(obj) {
		var janela = '';
		links = document.getElementsByTagName('a');
		for (i = 0; i < links.length; i++) {
			if ((links[i].className == 'myLink') && (links[i].id != obj.id)) {
				document.getElementById(links[i].id).onclick = function() {
					return false;
				}
			}
		}
		janela = window.open(obj.href);
	}
</script>
<body>
<a href="pagina1.html" target="_blank" class="myLink" id="link0" onClick="bloqueiaLinks(this); return false;">Yahoo</a>
<a href="pagina2.html" target="_blank" class="myLink" id="link1" onClick="bloqueiaLinks(this); return false;">ProcureTudo</a>
<a href="pagina3.html" target="_blank" class="myLink" id="link2" onClick="bloqueiaLinks(this); return false;">Google</a>
<a href="pagina4.html" target="_blank" class="myLink" id="link3" onClick="bloqueiaLinks(this); return false;">Página</a>
</body>
</html>

E na página que será aberta:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
	window.onload = function() {
		links = opener.document.getElementsByTagName('a');
		for (i = 0; i < links.length; i++) {
			if ((links[i].className == 'myLink')) {
				opener.document.getElementById(links[i].id).onclick = function() {
					return true;
				}
			}
		}
	}
</script>
</head>
<body>
</body>
</html>

Vê aí se serve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guttemberg,

 

Valeu pela ajuda! Muito bom o seu código.

 

Para o meu sistema ele funcionou em parte.. o problema é o seguinte...

 

Estou desenvolvendo um sistema de gerenciamento de rede. Em uma página específica, faço um teste de ping para mais de 20 switches. Por conta disso a página demora muito tempo para abrir, pois ela só carrega completamente depois que todo o teste de ping é feito, ou seja, se eu clicar no link que abre esta página, e logo depois clico em outro link qualquer, o Apache fica procurando para onde mandar o resultado dos pings e não encontra, uma vez que a página foi fechada, por isso ele trava.

 

Testei seu código aqui e ficou beleza, com exceção do seguinte...

 

- Ao clicar no link que abre a página dos pings (a mais importante), ele bloqueia todos os outros links, menos ele mesmo. Teria como bloquear o próprio link depois que ele é clicado?

- E outra coisa seria abrir as páginas como target=”_parent”. Alterei diretamente nos links, mas não funcionou. Talvez o “janela = window.open(obj.href);” esteja influenciando. Teria como alterar também?

 

Fico no aguardo..

Valeu!

 

Henrique Dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Henrique, pra 'desativar' todos os links, altere:

 

if ((links[i].className == 'myLink') && (links[i].id != obj.id)) {

Para...

if (links[i].className == 'myLink') {

Sobre o target, alterando diretamente no link tem que funcionar.

 

\o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza Guttemberg, ficou tudo certo.

 

Somente mais uma dúvida.. tem como os links serem abertos na mesma página? E não em uma nova janela?

 

Creio que alteração deva ser feita aqui..

 

janela = window.open(obj.href);

É isso mesmo? Como poderia ser?

 

[]'s

 

Henrique Dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo.. consegui...

 

É só substituir o primeiro código pelo segundo...

 

janela = window.open(obj.href);

janela = window.location(obj.href);

Dessa forma, abrindo na mesma tela, não é preciso inserir aquele código na página de destino. Posso ir e voltar nas páginas que os links não permanecem travados.

 

<script>
	window.onload = function() {
		links = opener.document.getElementsByTagName('a');
		for (i = 0; i < links.length; i++) {
			if ((links[i].className == 'myLink')) {
				opener.document.getElementById(links[i].id).onclick = function() {
					return true;
				}
			}
		}
	}
</script>

Valeu pelas ajudas..

 

Abraços!

 

Henrique Dias

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.