Ir para conteúdo

POWERED BY:

Arquivado

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

[ GuTo ]

Retornar FALSE ao elemento que disparou o evento

Recommended Posts

function getSrc(e)  { /* event */ return (e.target) ? e.target : (window.event && event.srcElement) ? event.srcElement : false; }function editar(e) { confirm('Deseja editar este contato?') ? location.href = getSrc(e).href : /*retornar nada, nem ir pra o link*/ }function apagar(e) { confirm('Deseja apagar este contato?') ? location.href = getSrc(e).href : alert('Ok, nenhuma ação foi feita!'); /*retornar nada, nem ir pra o link*/ }<a href="contatos.asp?m=2&id=258" title="Editar contato" onclick="editar()">Editar</a><a href="contatos.asp?m=3&id=258" title="Apagar contato" onclick="apagar()">Apagar</a>
Vejam só...

 

Tenho estes dois links acima na minha página.

Praticando o JS-UNOBTRSUIVE (NÃO OBSTRUSIVO), eu adicionei os atributos onclick neles.

Dae eles resultaram naquilo ali, até aí tudo beleza né?

 

Então, eles funcionam direitinho, chamam as funções direitinho.

Só que eu preciso de uma coisa, caso a pessoa NÃO confirme a ação, não deve acontecer nada, ou seja, o link não pode obedecer o href.

Mas eu não sei como devolver isso como falso de maneira CROSS BROWSER.

 

No código aí de cima, está comentado aonde preciso inserir esta parte.

 

Antes que perguntem, eu to adicionando o onclick desta maneira.

var as = document.getElementsByTagName('a')	var a	for(var x=0; x<as.length; x++) {  a = as[x]  if (a.href.indexOf('m=2') > 0) {	  addEvent(a,"click",editar,false)  }  else if (a.href.indexOf('m=3') > 0) {	  addEvent(a,"click",apagar,false)  }	}// A função addEvent é essa:function addEvent(elm, evType, fn, useCapture) { // http://www.scottandrew.com/weblog/jsjunk#events	if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; }	else if (elm.attachEvent) { var r = elm.attachEvent("on"+evType, fn); return r; }	else { alert("Handler could not be removed"); return false }}
Acho que teria de usar algo parecido com isso, mas não sei com adaptar..

if (window.event) { event.returnValue = false } else { try { e.preventDefault() } catch(e)  { /*...*/ } }
ATENÇÃO:

Pra quem quiser ver a página rodando, só como teste pra entender como o script funciona, dê um look neste link:

Imagem Postadahttp://www.guto.retrieve.com.br/portalbrasil/contatos.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Guto,

 

Cria o link assim: <a href="java script: void(0);" onclick="...">

 

Aí no onclick, você executa uma função que, se a pessoa confirmar, será redirecionada pelo "location.href", se não, não executa nada. Esses valores que você tá passando pela querystring que tá no href, você pode passar como parâmetros da função executada no onclick (no caso de você estar criando tudo isso dinamicamente).

beleza?

 

[]'s!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for oq entendi... coloca assim:

 

function getSrc(e)  { /* event */ return (e.target) ? e.target : (window.event && event.srcElement) ? event.srcElement : false; }

 

function editar(e) { confirm('Deseja editar este contato?') ? location.href = getSrc(e).href : return false; }

function apagar(e) { confirm('Deseja apagar este contato?') ? location.href = getSrc(e).href : alert('Ok, nenhuma ação foi feita!'); return false;}

 

<a href="contatos.asp?m=2&id=258" title="Editar contato" onclick="return editar()">Editar</a>

<a href="contatos.asp?m=3&id=258" title="Apagar contato" onclick="return apagar()">Apagar</a>

 

Flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas pessoal, como falei, e vocês podem ter percebido, o link no html está assim:

<a href="contatos.asp?m=2&id=83" title="Editar contato" id="edit_A">Editar</a><br />	<a href="contatos.asp?m=3&id=83" title="Apagar contato" id="apag_A">Apagar</a><br />
Daí, fazendo o uso do JAVASCRIPT NÃO OBSTRUSIVO, adiciono no link o atributo onclick que chama a função.

 

Se você acessarem o endereço que passei, vocês poderão ver como isso funciona.

Montei um loop, para que adicione em cada link a respectiva função.

Mostro isso para vocês de uma maneira fácil, mostrando com uns alertas a cada link que adciono o atributo.

 

E para fazer isso, eu chamo akela função addEvent.

E nela, estou fazendo assim.

addEvent(a,"click",editar,false);
( Vocês podem ver melhor isso olhando no código fonte da página que passei no 1ºpost )

Então, ela adiciona o evento ao link.

beleza até aí.

 

O que eu preciso e quero apenas, é mudar NAS FUNÇÕES editar e apagar, certo?

 

Kero apenas retornar FALSE caso o usuário não confime.

E tem de ser através da função, não de html. beleza?

 

Daí é isso que queria fazer.

 

E explico pq dessa forma :D

Pq aprendi que devemos dar liberdado ao usuário.

O atributo href deve sempre permanecer com o link real.

O usuário pode kerer abrir o link numa nova aba, numa nova janela, enfim.

E para não precisar passar parâmetros através da função, trabalho apenas pegando os valores e manipulando-os do elemento o qual disparou a ação.

 

O script em si já está funcionando tudo perfeitamente, só tem esse inconveniente, de o cara não confirmar a ação, mesmo assim, ela prosseguir.

 

Então, alguém tem uma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahhh entendi, hehehehe....

ou pelo meno axu q entendi :unsure:

 

ve se eh isso:

 

<script language="Javascript">function editar() {pergunta = confirm('Deseja editar este contato?');if(pergunta !== true){return false;}}function apagar(){pergunta = confirm('Deseja apagar este contato?');if(pergunta !== true){return false;}}</script><a href="contatos.asp?m=2&id=258" title="Editar contato" onclick="return editar()">Editar</a><a href="contatos.asp?m=3&id=258" title="Apagar contato" onclick="return apagar()">Apagar</a>

falow!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu a intenção brow! :D

 

Mas como falei, pense que o onclick só pode ser assim: onclick="editar()"

Só isso!

Não pode ter return, nem event, o ID que kero apagar nem nada.

 

Mas então, consegui criar uma maneira.

 

Vejam lá na página! ;)

 

A função ficou um pouco maior, se tiver como diminuir ela, me avisem ;)

 

As funções editar e apagar, ficaram com um mesmo comando, caso o cara, não confirme a ação.

function editar(e) {	if (confirm('Deseja editar este contato?')) { location.href = getSrc(e).href }	else {  if (window.event) { event.returnValue = false; return false } else { try { e.preventDefault(); alert('try') } catch(e)  { e.preventDefault(); alert('catch') } }	}}
Tipo, no ELSE, fica igual para esta, quanto para a outra (apagar()).

 

Não sei se no JS não existe um tipo de sub, algo parecido como no asp..

 

Se não tiver, pensei em diminuir em um poko..

Dae no else só colocaria, algo como: actionNo(e)

 

function actionNo(e) {  if (window.event) { event.returnValue = false; return false } else { try { e.preventDefault(); alert('try') } catch(e)  { e.preventDefault(); alert('catch') } }}

Ah, mais uma coisa:

Eu não saco nada destes TRY e CATCH, alguém poderia me explicar?

 

Desde já, agradeço a atenção pessoal! :D

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, não precisa de mais nada não!Aprendi pra que serve exatamente o try e catch ;) E mais uma coisa... testei este script e ele funcionou nos seguintes browsers:- FireFox 1.0.2- Internet Explorer 6 (atualizadão... hehe)- Mozzila 1.7bSó não testei nestes browsers (pq não tenho-os):- Opera- Netscape- Safari- KonquerorSe alguém puder testar aí ;) heheheAbração!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, eu viajei completamente nesse script... porem ele funciona no Opera Versão 7.21....vou ler direito essa parada ae depois...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahhh saquei qual é desse script ae.... hehehe... realmente é bem util, mais deve tomar cuidado de como ele se comporta em todos os browsers.... vou testar no mac depois e te dou um toque...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi o porque de não poder colocar o return... mas beleza... o código tá funcionando e isso é q importa...

 

Testei aki no opera e funcionou de boa...

Falow! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.