Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galera !!
Gostaria de fazer uma função no Jquery parecida com o foreach do php:
Ex:
foreach ($_POST as $key => $value) {
$kv[] = "$key=$value";
}
Aki eu si que ele diz que o atributo name recebe o valor do atributo value do mesmo, então se o campo input tiver o name ="data" ele cria uma variavel $data com o valor do input com o mesmo nome.
No Jquery gostaria de fazer o mesmo
Ex:
Aki diz que quando eu clicar em um select ele pega o atributo id e o valor:
$('select').change(function(){
$(this).each(function(){
var id = $(this).attr("id");
var valor = $(this).val();
});
});
Gostaria de saber como fazer igual ao php associar o id com o valor.
ex: se o select clicado tiver o id data, ele cria uma variavel data com o valor associado, assim criará variaveis dinamicamente e eu saberia que se der um alert com id ou nome do select ele exibira o valor associado.
Alguem poderia me ajudar por favor ?
primeiramente Obrigado pela atenção
Na pagina eu tenho cinco select,não quero criar uma função para cada um e tb não quero ter que criar na unha as variaveis, eu quero que quando clique nos selects ele crie as variaveis com o nome dos selects, como o usando o foreach do php, vindo o valor de um get ou post, levando em consideração que no Jquery o change, click e outros são considerados gets.
Então cara.. php é uma linguagem interpretada e estruturada, e agora com umas doses de orientação a objetos.
javascript é uma linguagem diferente, que implementa alguns paradigmas diferentes também.
Você não precisa criar as 5 variaveis na mão, e nem criar uma function para cada select.
Entenda que são linguagens diferentes, e existem formas diferentes de chegar a um resultado, dado o paradigma de cada uma delas.
Essa forma de "criar as variaveis", igual o foreach() do php faz, não funciona bem para javascript. Pois temos outras formas melhores de manipular os elementos.
Diga oque você precisa, o q você precisa fazer com isso tudo. Assim é mais simples indicarmos uma solução melhor, do que essa que você pensou.
Como disse tenho 5 select, tenho que pegar o valor assim que clicado armazenar numa variavel e depois de pegos todos formar uma variavel só para enviar por post
então o método .serialize(), que eu citei no meu primeiro post deste tópico resolve muito bem essa questão.
http://api.jquery.com/serialize/
já que você está usando jQuery, não precisa fazer tudo isso ai na mão. Esse método da lib faz por você.
<script type="text/javascript">
<!--
$(document).ready(function() {
$('select').change(function(){
$(this).serialize();
// como eu associo o valor ao seu select
var dia = menu1;
var ano = menu2;
ou mesmo dando um alert direto
alert(menu1);
ou usando assim:
alert(select[0])
});
});<select name="menu1" >
<option>unnamed1</option>
<option>unnamed2</option>
<option>unnamed3</option>
</select>
<br /><br />
<select name="menu2" >
<option>unnamed1</option>
<option>unnamed2</option>
<option>unnamed3</option>
</select>
//-->
</script>
Tentei assim mas não deu certo sempre retorna uma variavel vazia
<script type="text/javascript">
<!--
$(document).ready(function() {
$('select').change(function(){
var fields = $(this).serialize();
fields = fields.split("=");
var selecte = fields[0];
var valor = fields[1];
if(selecte == "menu1"){
var dia = valor;
}
if(selecte == "menu2"){
var mes = valor;
}
var data = dia+"/"+mes;
alert(data);
});
});
//-->
</script>
</head>
<body>
<div id="results"></div>
<form name="form1" id="form1">
<select name="menu1" >
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<br /><br />
<select name="menu2" >
<option>Jan</option>
<option>Fev</option>
<option>Mar</option>
</select>
</form>você chegou a ver o link ?
o serialize() é um método do objeto form, e não do <select>
Estou vendo neste momento, sei que pode ser usado em varios objetos, porém minha duvida inicial é como armazenar cada valor em uma variavel diferente a cada clique.
Fiz desta forma e funcionou exatamente igual ao link, porem quando eu preciso armazenar em variavel não funciona
exemplo do link, para select:
<script type="text/javascript">
<!--
$(document).ready(function() {
$('select').change(function(){
/*var fields = $(this).serialize();
fields = fields.split("=");
var selecte = fields[0];
var valor = fields[1];
if(selecte == "menu1"){
var dia = valor;
}
if(selecte == "menu2"){
var mes = valor;
}
var data = dia+"/"+mes;
alert(data);
var fields = $(this).serializeArray();
jQuery.each(fields, function(i, field){
var sel = field.name;
var valor = field.value;
if(sel == "menu1"){
var dia = valor;
}
if(sel == "menu2"){
var mes = valor;
}
var data = dia+"/"+mes;
alert(data);
});*/
var fields = $(this).serializeArray();
jQuery.each(fields, function(i, field){
$("#results").append(field.value + " ");
});
//alert(fields);
});
});
//-->
</script>
<div id="results"></div>
<select name="menu1" >
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<br /><br />
<select name="menu2" >
<option>Jan</option>
<option>Fev</option>
<option>Mar</option>
</select>minha duvida inicial é como armazenar cada valor em uma variavel diferente a cada clique.
desnecessário 'armazenar cada valor em variaveis', e é isso que estou tentando te falar desde o início.
em todo caso:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var dados = $('form').serialize();
alert( dados );//menu1=1&menu2=Jan
var arr = new Array();
$('select').each( function( i ){
var $this = $( this )
arr[i] = $this.attr('name')+'='+$this.val();
});
alert( arr );//menu1=1,menu2=Jan
alert( arr.join('&') ); //menu1=1&menu2=Jan
});
</script>
<form>
<select name="menu1" >
<option value="1">1</option>
<option value="2" selected="selected">2</option>
<option value="3">3</option>
</select>
<br /><br />
<select name="menu2" >
<option value="Jan">Jan</option>
<option value="Fev">Fev</option>
<option value="Mar">Mar</option>
</select>
</form>Obrigado
>
Gostaria de saber como fazer igual ao php associar o id com o valor.
isso não parece ser "necessário"
porém, é mais simples q você explique a sua necessidade.