Jump to content
tobias

Confirmação em js, com break

Recommended Posts

tobias

Boas,

Bem vou directo ao assunto, o meu problema passa por ser não conseguir sair de um if, em JS sem que execute o resto do código!

Ora bem, tenho um if em javascript dentro de outro em php (isto nao deve ser muito correcto mas.. pronto :P )

if($_POST['h'] == 2)
{echo ("<script type='text/javascript'>
var resp = confirm('Tem a certeza que pretende alterar o registo?');
if (resp){alert('Alterado com sucesso!');}
else{document.location= 'index.php?pag=1&i=12&id=".$_GET[id]."';}</script>"); 
//Código em php(alterações para a bd)
....

Já tentei varias coisas, este é o código(agora) com o mesmo problema que os outros todos(mesmo clicando em cancelar executa o código seguinte).

O que eu quero é simples, até já fiz algo do género a funcionar(foi alterar o URL e buscar por GET), mas desta vez não da para fazer o mesmo porque iria perder os valores que são enviados por POST.

Obrigado desde já, e espero que me ajudem  :thumbsup:

Tobias Cintrão


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
brunoais

Esse código é muito difícil de ler. De qq modo, q código é que queres que não seja executado se o utilizador carregar no cancelar?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
tobias

Boas,

O código que quero que não execute quando o utilizador clicar cancelar, é o código imediatamente abaixo dessa condição, ou seja quando faço o document.location... não executar mais nada, desta pagina, ou seja sair do if, sem o terminar.

Obrigado desde já pela a atenção.

Cumps


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
brunoais

Independente de ele escolher sim ou não ele n tem mais código para executar. N tens mais código javascript depois do if...


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
tobias

Não é isso, eu quero que ele ao carregar cancelar, repara que tem um windows.location, eu quero que ele va para esse windows.location sem executar o restante código, (neste caso php, para fazer alterações de dados na bd),  não existe uma maneira directa de dizer "break"? ou algo do género,  eu penso que tenho algum erro neste código, pois nao teria logica ele continuar a processar o php quando lhe mandamos ir para outra pagina.

Eu pensei em fazer esse windows location para a variavel post perder o valor e depois não voltar a entrar no if.

if($_POST['h'] == 2)                 //ou seja quando clicar no botão alterar
{echo ("<script type='text/javascript'>
var resp = confirm('Tem a certeza que pretende alterar o registo?');     //mostra uma massagem para confirmar
if (resp){alert('Alterado com sucesso!');}   //caso aceitar, aparecer a messagem alterado com socesso (e conclui as alterações com o restante codigo)
else{            //caso cancelar, ir para a pagina com a variavel pag=1 (basicamente voltar a trás)
document.location= 'index.php?pag=1';}</script>"); 

	//Identificaçao              Inicio do código para a alteração.
	$sql = "UPDATE .......

Bem pensando um pouco, isto o que faria era ao clicar cancelar na massagem ia para a pagina index.php?pag=1, e apenas isto, mas não o problema é que ao clicar cancelar, ele executa o código para alteração na base de dados, e só ai é que vai para a pagina acima dita  ;)

Alguém que me abra os olhos, porque acredito que seja um erro básico, mas já estou tão atrofiado que não consigo encontrar o problema! 😲

A espera de resposta, e obrigado brunoais pela atenção.


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
useware

O que queres fazer não é possível. Não dá para fazer com que o código no cliente (javascript) influencie a execução do código no servidor (php).

A abordagem típica para o que queres fazer passa mais ou menos por isto:

1. Tens um formulário onde introduzes as alterações.

2. No formulário fazes um bind ao evento submit que executa o javascript onde pedes a confirmação.

3. Se o utilizador responder não, então não submete o formulário. Se responder sim submete, ou seja faz um POST ao servidor e o teu php executa as alterações na BD.

Um exemplo para perceberes melhor o que estou a dizer:

http://www.java2s.com/Code/JavaScript/Form-Control/TheonResetandonSubmitEventHandlers.htm

Share this post


Link to post
Share on other sites
tobias

useware muito obrigado :D

Percebi imediatamente mal vi a resposta, foi quase como um click no cérebro  ;)

Que raio de problema este, visto que eu faço o mesmo que fiz agora para validações em js, com onsubmit="return função".

Já estava farto de  :wallbash: hehehe

Bem agradeço de novo e vai aqui o código usado para quem quiser ver, por alguma razão.

Função "comfirma", que verifica o resultado "ok ou cancelar" e remete true  ou falso respectivamente.

function confirma()
{
	var resp = confirm('Tem a certeza que pretende alterar o registo?');
	if (resp){
	alert('Alterado com sucesso!');
	return true;
	}
	else{
	return false;
		}
}

Inicio do formulario onde chamamos a função "confirma" na altura de submeter os dados.

<form name="form1" action="" method="post" onsubmit="return confirma();">    

Cumps.

Tobias Cintrão


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites
brunoais

<form id="form1" action="" method="post" onsubmit="return confirma();">    

Isto, embora n esteja errado, mete-se no caminho do unobtrusive javascript.

O objetivo é separar o javascript, o CSS e o HTML um dos restantes.

O que deves fazer é acederes a este node usando o getElementById() e usares o método addEventListener ou gravares a função num atributo. Algo do género:

Preferivelmente:

document.getElementById('form1').addEventListener('submit', confirma, false);

Alternativamente:

document.getElementById('form1').onsubmit = confirma;

e no confirma:

function confirma(e){
e.stopPropagation();
if(!confirm("something")){
	e.preventDefault();
	return false;
}
return true;
}

O return de false e de true é só por motivos de compatibilidade com browsers antigos

addEventListener é preferível pq um node pode ter vários listeners mas cada node só pode ter um único atributo para cada nome de atributo.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
tobias

Boas Brunoais

Obrigado pela dica  :)

Só comecei no javascript por necessidade neste projecto que estou a desenvolver, por isso é que não sei esses pormenores, mas pronto, já percebi e tem lógica, separar os elementos js dos restantes, e os restantes também entre si.

Eu tenho muito a mania de misturar código, ver se perco isso :D

Cumps,

Tobias


Cumprimentos,Tobias Cintrão


"O que se pensa começa no que se ouve"
"Inspiração == Interrupção momentânea da estupidez"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.