Ir para conteúdo

Arquivado

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

janick

[Resolvido] Aciona botão com jQuery

Recommended Posts

Olá.

 

Tenho campos de formulário que estão sendo validados no Blur

Fiz de uma forma que, só libera o botão de acesso, quando todos os campos estiverem validados.

 

Porém estou imaginando se no último campo o usuário não tirar o foco, não vai rodar a validação e não vai habilitar o botão.

Existe alguma função em jQuery que me permita habilitar este botão independente se o usuário tirou o foco do input ou não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe alguma função em jQuery que me permita habilitar este botão independente se o usuário tirou o foco do input ou não?

temos que pensar em eventos.

 

No caso, eu trocaria o blur do ultimo campo por um keypress ou algo do tipo, pois qq coisa q o cara digitar já dispara a validação, e habilita o botão ai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

para select, você tem q usar o evento onchange.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testei o Change do jQuery mas para os inputs esta funcionando como Blur...

 

seria correto eu fazer um if para identificar se o campo é input ou select ou é código desnecessário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende.. não conheço a tua rotina.

 

mas se for select, você deve usar onchange;

 

se for input, você deve usar onblur ou onkeypress como sugeri.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o código é esse

 

 

 

	$('.obrigatorio').addClass('pendente');

$('.obrigatorio').focus(function() {

	// silêncio

}).blur(function() {

	if($(this).val() == "" || $(this).val() == "Selecione" || $(this).val() == "Número") {

		if(!$(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'red').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', 'red');
			$(this).addClass('faltou');
			$(this).addClass('pendente');

		}

	} else {

		$(this).removeClass('pendente');

		if($(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'green').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', '#d0d0d0');
			$(this).removeClass('faltou');
			$(this).removeClass('pendente');

		}

	}

	if($('.pendente').length == 0) {

		alert($('.pendente').length);

		$(".btn-proximo-passo").css('cursor','pointer').attr("disabled", false);
		$('.btn-proximo-passo').fadeTo("slow", 1);

	}

	else {

		$(".btn-proximo-passo").css('cursor','default').attr("disabled", true);
		$('.btn-proximo-passo').fadeTo("slow", 0.3);

	}

});

// Quando acessa a página, o botão de próximo passo já abre desabilitado

$('.btn-proximo-passo').fadeTo("slow", 0.3);

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, então você deve fazer a verificação, para se for select, usar o evento onchange.

 

você pode fazer essa verificação direto no seletor:

 

$('input.obrigatorio')....

$('select.obrigatorio')....

Compartilhar este post


Link para o post
Compartilhar em outros sites

dupliquei entao a verificação, a mesma coisa só mudando o seletor

 

ficou o código abaixo, ele zera as classes "pendente", porém não aciona o botão, não entendi....

 

	// Começa verificação para input

$('input.obrigatorio').keypress(function() {

	if($(this).val() == "" || $(this).val() == "Selecione" || $(this).val() == "Número") {

		if(!$(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'red').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', 'red');
			$(this).addClass('faltou');
			$(this).addClass('pendente');

		}

	} else {

		$(this).removeClass('pendente');

		if($(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'green').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', '#d0d0d0');
			$(this).removeClass('faltou');
			$(this).removeClass('pendente');

		}

	}

	if($('.pendente').length == 0) {

		$('.btn-proximo-passo').css('cursor','pointer').attr("disabled", false);
		$('.btn-proximo-passo').fadeTo("slow", 1);

	}

	else {

		$('.btn-proximo-passo').css('cursor','default').attr("disabled", true);
		$('.btn-proximo-passo').fadeTo("slow", 0.3);

	}

});

// Termina verificação para input

// Começa verificação para select

$('select.obrigatorio').change(function() {

	if($(this).val() == "" || $(this).val() == "Selecione" || $(this).val() == "Número") {

		if(!$(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'red').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', 'red');
			$(this).addClass('faltou');
			$(this).addClass('pendente');

		}

	} else {

		$(this).removeClass('pendente');

		if($(this).hasClass('faltou')) {

			$(this).parent().css('background-color', 'green').animate({ backgroundColor: '#f9f9f9' }, 1000);
			$(this).css('border-color', '#d0d0d0');
			$(this).removeClass('faltou');
			$(this).removeClass('pendente');

		}

	}

	if($('.pendente').length == 0) {

		$('.btn-proximo-passo').css('cursor','pointer').attr("disabled", false);
		$('.btn-proximo-passo').fadeTo("slow", 1);

	}

	else {

		$('.btn-proximo-passo').css('cursor','default').attr("disabled", true);
		$('.btn-proximo-passo').fadeTo("slow", 0.3);

	}

});

// Termina verificação para select

Compartilhar este post


Link para o post
Compartilhar em outros sites

não cara!! não duplique não!!

 

principio básico de programação...

 

var verificacao = function(){

               if($(this).val() == "" || $(this).val() == "Selecione" || $(this).val() == "Número") {

                       if(!$(this).hasClass('faltou')) {
                               $(this).parent().css('background-color', 'red').animate({ backgroundColor: '#f9f9f9' }, 1000);
                               $(this).css('border-color', 'red');
                               $(this).addClass('faltou');
                               $(this).addClass('pendente');
                       }
               } else {
                       $(this).removeClass('pendente');
                       if($(this).hasClass('faltou')) {

                               $(this).parent().css('background-color', 'green').animate({ backgroundColor: '#f9f9f9' }, 1000);
                               $(this).css('border-color', '#d0d0d0');
                               $(this).removeClass('faltou');
                               $(this).removeClass('pendente');
                       }
               }
               if($('.pendente').length == 0) {
                       $('.btn-proximo-passo').css('cursor','pointer').attr("disabled", false);
                       $('.btn-proximo-passo').fadeTo("slow", 1);
               }
               else {
                       $('.btn-proximo-passo').css('cursor','default').attr("disabled", true);
                       $('.btn-proximo-passo').fadeTo("slow", 0.3);
               }
};

       $('input.obrigatorio').keypress( verificacao );
       $('select.obrigatorio').change( verificacao );

assim você consegue evitar a duplicação de script.

 

 

qnto a não habilitar, precisa debugar.

Aparece algum erro no console ?

 

 

Ctrl+Shift+J

Compartilhar este post


Link para o post
Compartilhar em outros sites

po valeu pela dica!!

 

fiz como você falou, mas estranhamente nao tá habilitando o botao... ele chega até lá, mostra o alert... mas nao habilita o botão

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, apareceu algum erro no console ?

 

Ctrl+Shift+J no Firefox:

http://wbruno.com.br/blog/2011/03/31/como-debugar-javascript-firefox-erros-comuns/

 

 

caso não, tente o seguinte:

$('.btn-proximo-passo').css('cursor','pointer').removeAttr('disabled');

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentou com o removeAttr() ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei

mas nao rolou ainda

 

o que mais me intriga é que ele entra no IF e lê um alert que coloquei pra testar.

 

 

tentou com o removeAttr() ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

como está o seu html ? poste aqui.

 

o trecho do botão e tal..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara é alguma m***** que to fazendo.

 

html

<button type="button" class="dir btn-proximo-passo">Próximo Passo</button>

 

joguei css em outros elementos e funcionou maravilha...

 

o button esta com 0.3 de fade

$('.btn-proximo-passo').fadeTo("slow", 0.3);

 

e quero que ele vá para fade normal quando estiver tudo ok

$('.btn-proximo-passo').fadeTo("slow", 1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

e como você sabe q o botão ta habilitado ou não?

 

você ta vendo o atributo com o Firebug ?

tem alguma ação nesse botão ? qual ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é válido sim.

 

que bom q resolveu. :lol:

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.