Ir para conteúdo

POWERED BY:

Arquivado

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

Okani Yori

Usando On/Live do Jquery em funções como validate e outras

Recommended Posts

Oi, pessoal, esses dias abri um Tópico e aprendi sobre o Live() e o On() do Jquery com a ajuda do William Bruno e resolveu em parte meu problema. Consegui usar o On em todas as funções que usavam o evento de click e change, mas não consigo usar em funções de scripts prontos, como o Jquery Validate.

 

O tópico original para quem quiser entender o que pretendo fazer

 

Segue o código da função que preciso chamar por On ou Live.

 

$("#form_usuario").validate({
	rules: {
		nome: {
			required: true,
			rangelength: [9, 30]
		},
	},
	highlight: function (label) {
		$(label).closest('.control-group').addClass('error');
	},
	success: function (label) {
		label.text('OK!').addClass('valid')
			.closest('.control-group').addClass('success');
	},
	//Se tiver tudo ok
	submitHandler: function (form) {
		//aqui vai ter um método post para enviar o formulário para o PHP.
		return false;
	}
});

 

Como eu chamo essa função $("#form_usuario").validate({... usando On ou Live?

 

Tentei assim:

$('a#mod').live("click", function() {
	$("#form_usuario").validate({
		//.......
	});
});

O link funciona, testei com um alert, mas o validete continua não funcionando, logo creio que tenho que por a própria validate com on, mas não tenho ideia de como. O form_usuario é o id do formulário a ser validado.

 

Eu preciso usar o o On, pois esse formulário é carregado em uma div usando o Jquery, com isso o meu script javascript deixa de funcionar se não usar o On e não quero ficar adicionando esse Jquery mais de uma vez, se não for necessário e falta apenas esse método que não está deixando funcionar direito.

 

Também queria saber como ficaria funções do tipo $('#redactor').redactor(),$('#some-textarea').wysihtml5();

usando o On.

 

Tentei procurar em todo lugar, achei alguns links com a ideia que coloquei acima, mas não funcionou e outra ideia foi usar ajaxComplete, mas no meu caso não é interessante, pois vou ter essa validate para todos os formulários, logo não seria interessante carregar todos de uma vez. O meu javascript fica junto em 1 único arquivo para facilitar o carregamento. Espero que possam me ajudar ou dar ideias para eu resolver esse pequeno problema, grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tinha visto essa página, mas não entendi como resolver meu caso.

 

Tentei colocar o validate dentro da function(){ aqui o validete }, mas aparece o seguinte erro: Uncaught SyntaxError: Unexpected token ( , mas em todo caso não sei como vou usar a função on(), não poderia demostrar como devo usar de acordo com os exemplos que informei acima? Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tem nada a ver com o on, nem com o live

 

no caso de plugins o uso é outro. Leia o texto e entenda ele. Veja o conceito lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tem nada a ver com o on, nem com o live

 

no caso de plugins o uso é outro. Leia o texto e entenda ele. Veja o conceito lá.

 

Certo não precisa usar o On ou Live, mas não entendi como usar no meu caso.

 

O validate não usa o evento Load. Não tem como informar um exemplo de como ficaria no meu caso. No exemplo informado, ele usa function(){ dentro do load, mas não sei como usar no meu caso. Já tentei com click e etc, mas não funciona. Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é que "não precisa", é que não dá.

você leu o texto mas não entendeu.. era para você extrair a idéia e não aquela implementação em específico.

 

 

.. vamos lá... como você faz o teu ajax ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é que "não precisa", é que não dá.

você leu o texto mas não entendeu.. era para você extrair a idéia e não aquela implementação em específico.

 

.. vamos lá... como você faz o teu ajax ?

 

Oi, então meu Javascript está em 2 arquivos. 1 contendo o Jquery e outros plugins e outro com os scripts que eu criei. Usando o método On consegui usar eles, mesmo após carregar um conteúdo com ajax. Mas o validate e o editor de texto não funcionaram. Por isso tentei usar o On e Live, mas como você falou não é possível.

 

O código do validate é igual o acima, veja aqui:

 

$("#form_usuario").validate({
               rules: {
                       nome: {
                               required: true,
                               rangelength: [9, 30]
                       },
               },
               highlight: function (label) {
                       $(label).closest('.control-group').addClass('error');
               },
               success: function (label) {
                       label.text('OK!').addClass('valid')
                               .closest('.control-group').addClass('success');
               },
               //Se tiver tudo ok
               submitHandler: function (form) {
                       //aqui vai ter um método post para enviar o formulário para o PHP.
                       return false;
               }
       });

 

Basicamente vai ter vários desses no meu script, mas cada um para um formulário especifico. Eu colocava assim no Javascript e ele vai vendo se está certo o que vou colocando nos campos do formulário e no fim deixa enviar se estiver tudo ok, logo não uso load, click e nenhum outro evento para fazer o plugin funcionar.

 

Eu carrego o formulário por Ajax em uma div que já existe, mas está em branco (sem conteúdo dentro). Após a chamada do Ajax é carregado o formulário, mas deixa de funcionar o javascript de validação, logo não sei como fazer ele funcionar, sem precisar carregar de novo o script ou colocar ele dentro da página do formulário.

 

Ja tentei de tudo e nada deu certo. Só queria um jeito de usar esse script sem precisar inserir de novo, evitando consultas desnecessárias. E tentei fazer parecido com o seu exemplo, mas sem o load e deu erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok.. mas você não mostrou oq eu pedi.

 

cadê o teu ajax ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok.. mas você não mostrou oq eu pedi.

 

cadê o teu ajax ?

 

Foi mal entendi errado.

 

Nesse exemplo seria o link da tabela do usuário e o formulário que carrega é o de modificar usuário, ao clicar no link modificar

//Links da tabela
$('div').on('click', 'tbody a', function (e) {
	e.preventDefault();
	var url = $(this).attr("href");
	//$('#sub_c').load(url);
	atualizado2(url,"#sub_c");

});

 

A função atualizado2 está abaixo. Também já usei o Load que está comentado acima.

 

//Recebe a url e o c = campo a ser preenchido após a resposta do método ajax
//Usados por métodos no qual não precisa mostrar a URL na barra de navegação
function atualizado2(endereco, c) {
	$.ajax({
		type: "GET",
		url: endereco,
		data: 0,
		success: function (data) {
			$(c).show('slow').html(data);
		}
	});
}

 

Se eu coloco o javascript na pagina que é carregada pelo Get, funciona, mas não acho que não é o mais correto para o que estou pretendendo fazer. Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui, olha:

 

                       success: function (data) {
                               $(c).show('slow').html(data);
                               //chame o validate aqui

                       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

\

Não tem como por fora do Ajax?, pois essa função atualizado2 é uma função que vou usar para chamar vários links da tabela, sendo apenas o link modificar e adicionar, que carregam o formulário e em outras tabelas tem que carregar outros formulários e outras validações.

 

O que pretendia era deixar todos os validate com o seu respetivo id do formulário, sem ficar preso ao Load ou outra função. Mas se não tiver jeito vou ter que tentar implementar desse jeito, talvez usar uns if ou então deixar o script maior mesmo e mais repetido. Obrigado.

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.