Jump to content


Photo

Enviar Campos Checkbox Por Ajax


  • Faça o login para participar
2 replies to this topic

#1 Rosemeire da Silva

Rosemeire da Silva

    Rosemeire da Silva

  • Usuários
  • 11 posts
  • Sexo:Não informado

Posted 30/08/2006, 08:51

Alguem sabe como posso recuperar os checkbox selecionados do form,
e utilizados no script php que e atualizado com ajax na index ??

:P





Galerinha consegui fazer... eh o seguinte, primeiramente precisamos de uma função que resgata todos os valores do form...

os nomes no checkbox ficaram assim:

op_1, op_2 e assim por diante



function getFormValues(i, form_name){
		var str = "";
		document.forms[i].name = form_name;
		var formObject = document.forms[i];

		for(var n = 0; n < formObject.elements.length; n++) {
			// alert(' n: '+n+formObject.elements[n].type+' '+formObject.elements[n].name+'\n'+formObject.elements[n].value);
			if(formObject.elements[n].type == "radio") {
				if(!str) {
					if(formObject.elements[n].checked == true) {
						str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
					} else {
						str = str;
					}
				} else {
					if(formObject.elements[n].checked == true) {
						str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value); 
					} else {
						str = str;
					}
				}
			} else
			if(formObject.elements[n].type == "checkbox") {
				if(!str) {
					if(formObject.elements[n].checked == true) {
						str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
					} else {
						str = str;
					}
				} else {
					if(formObject.elements[n].checked == true) {
						str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value); 
					} else {
						str = str;
					}
				}
			} else if(formObject.elements[n].type == "button") {
				str = str;
			} else {
				if(!str) {
   					str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
				} else {
						str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
				}
			}
		}
		return (str);
   }


A função monta uma string com os valores para enviar pro script separados por '&', só coloca na string os checkbox que foram checados;

http_request.open(POST,url,true);
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http_request.send(str);

Você utiliza o método post pra enviar os parametros pro script (url)... No script você:
   $id = ($_POST['id']);// são campos do formulário;
   $limit = $_POST['limit'] - 1;// hidden com o números de checkbox 
   $v_descricao = utf8_decode($_POST['tf_descricao']);// o utf8_decode recupera o valor do campo com a acentuação correta

pra verificar os checkbox:

   for ($i=0;$i<=$limit;$i++){
	 if (!is_null($_POST['op_'.$i])) {
		 // inseri os valores do checkbox na tabela;
	 } 
   }



Espero ter contribuido com a lógica de raciocinio... Quem tiver outra idéia... posta ai pra conhecermos... :P

Um abração

Edição feita por: Rosemeire da Silva, 30/08/2006, 11:33.

Rosemeire da Silva
Analista de Sistemas

#2 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 01/09/2006, 11:34

Interessante sua lógica ;D
Muito boa ;D


vanis vamos fazer algumas melhorias ?

isso aqui :
for(var n = 0; n < formObject.elements.length; n++) {
if(!str) {
					if(formObject.elements[n].checked == true) {
						str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
					} else {
						str = str;
					}
				} else {
					if(formObject.elements[n].checked == true) {
						str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
					} else {
						str = str;
					}
				}
	 }

voce poderia trocar algo como isso
for(var n = 0; n < formObject.elements.length; n++) {
if ((formObject.elements[n].type == "radio") || (formObject.elements[n].type == "checkbox") || (formObject.elements[n].type == "button")) {
	if (formElement.checked) {
				str += formObject.elements[n].name+"="+encodeURIComponent(formObject.elements[n].value;
				if ((i > 0) && (i < (formObject.length-1)))
					str += "&";
			}

	}
}

ALGO COMO ISSO, fiz na pressa, entao não sei se pode estar certo, mas pelo menos encurta algumas linhas de seu codigo (y)

Você roda a mesma sequencia para 3 tipos de if ("butto","radio","checkbox"), voce pode encurtar fazendo um if ou condições ou

se você estiver usando o ajax prototype, voce pode usar a funcao ajax.updater com o metodo post (gosto de passar informacoes de formlulario com metodo post)

var ajax = new Ajax.Updater(
						div,
						url,
						{
							method: 'post',
							postBody: str,
							onComplete: function(ex) { alert(ex.responseText);}
						});


entendeu um poco ? ou complico mais?

sucesso ae (y) ;D

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#3 medinadato

medinadato

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 05/01/2007, 23:00

ouuu... esta na net procurando um scrip desses ai... seguinte... o primeiro ficou extenso msm... ja o segundo precisou de umas correçoes também.. mas nao envia campos text, textarea.... .


bem... fiz esse dak baseado no de vcs.. e deu certo.... ;)


function getFormValues(i) {
	var str = "";
	var formObject = document.forms[i];
			
	for(var n = 0; n < formObject.elements.length; n++) {
		// alert(' n: '+n+formObject.elements[n].type+' '+formObject.elements[n].name+'\n'+formObject.elements[n].value);
		if(formObject.elements[n].type == "radio" || formObject.elements[n].type == "checkbox") {
			if(!str) {
				if(formObject.elements[n].checked == true)
					str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
				else
					str = str;
			} 
			else {
				if(formObject.elements[n].checked == true)
					str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
				else
					str = str;
			}
		} 
		else if(formObject.elements[n].type == "button")
			str = str;
		else {
			if(!str)
				str = formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
			else
				str = str + '&' + formObject.elements[n].name + '=' + encodeURIComponent(formObject.elements[n].value);
		}
	}
	return (str);
}

flw




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq