Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia Galera.
Vou resumir esta função que estou tentando fazer com códigos que eu achei e fui adptando de acordo com minha necessidade.
Até o primeiro campo está tudo funcionando corretamente, a partir do segundo campo o bixo pega.
É o seguinte, eu tenho um cliente que necessita cadastrar vários detalhes para um determinado produto, vamos usar como exemplo um computador.
O COMPUTADOR, pode ter detalhes como Memória, HD, Monitor, Placa de Rede e etc, assim como neste detalhes também eu vou ter mais um campo de subdetalhes tipo: Memória -> SATA ou DDR, DDR2 e assim por diante com o HD, Monitor e etc. Além disso, eu quero atribuir valores de digitação própria como por exemplo: MEMÓRIA -> SATA -> (digitado) 2GB.
Seria assim:
(listbox) DETALHE ----> (listbox)SUBDETALHE ----> (textbox)CAMPO PARA DIGITAR
Ok até aí? Legal.
Bem, continuemos com o COMPUTADOR.
Um computador possui muitos detalhes, então eu tenho uma função Java para criar quantos campos eu quiser, sem atualizar o form, sendo assim, eu tenho quantos campos eu quiser para detalhar o melhor possivel meu produto (no caso o computador), este não é o problema, o problema é que eu tenho uma função em Java também que traz do BD todos os SUBDETALHES para que quando o cliente selecionar o DETALHE, apareçam na listbox seguinte apenas SUBDETALHES correspondente aquele DETALHE, eu não posso deixar ele selecionar MONITOR e colocar como SUBDETALHE SATA, por isso essa função traz a um campo específico todos os valores de acordo com o detalhe selecionado. OK?
Veja o código então:
<html>
<!--#Include file="handhelp/set/conect-db.inc"-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Ajuste o campo abaixo para</title>
<script language="javascript" type="text/javascript">var iCount = 1;
var iCampos = 1;
var hidden1;
//Definindo quantos campos poderão ser criados (máximo);
var iCamposTotal = 300;
//Função que adiciona os campos;
function addInput() {
if (iCampos <= iCamposTotal) {
hidden1 = document.getElementById("hidden1");
//Criando uma variável que armazenará as informações da linha que será criada.
//Os campos estão sendo colocados no interior de uma div, pois a linha contém muitos elementos;
//Basta excluir a div, para excluir todos os elementos da linha;
var texto = "<div id='linha"+iCount+"'>Detalhe:<select OnChange='seleciona()' name='categoria"+iCount+"' id='categoria' size='1' height='1'><option>Selecione uma Opção...</option>"+ %>"<option value='<%=Rs("id")%>'><%=Rs("nome")%></option>"+<%
Rs.MoveNext
Loop "</select> SubDetalhe:<select name='categoria"+iCount+"' id='subdetalhes' size='1' height='1'><option>Selecione um Detalhe...</option></select>"+
" Informação:<input type='text' name='quantidade"+iCount+"' id='quantidade"+iCount+"' value=''></div>";
var camposelect = "subcategoria"+iCount;
//Capturando a div principal, na qual os novos divs serão inseridos:
var camposTexto = document.getElementById('camposTexto');
camposTexto.innerHTML = camposTexto.innerHTML+texto;
//Escrevendo no hidden os ids que serão passados via POST;
//No código ASP ou PHP, você poderá pegar esses valores com um split, por exemplo;
if (hidden1.value == "") {
document.getElementById("hidden1").value = iCount;
}else{
document.getElementById("hidden1").value = +iCount;
}
iCount++;
iCampos++;
}
}
vari = new Array()
i = 0;
//SELECT para pegar subdetalehsvari[i] = new Array(3)
vari[i][1] = "<%=Rs("iddetalhe")%>";
vari[i][2] = "<%=Rs("id")%>";
vari[i][3] = "<%=Rs("nome")%>";
i++;function seleciona(){
for(a=document.detalhes.subdetalhes.length; a>=0; a--) {document.detalhes.subdetalhes.options[a]=null; }
i=0;
while (i < vari.length) {
if(document.detalhes.categoria.options.value==vari[i][1]) {
document.detalhes.subdetalhes.options[document.detalhes.subdetalhes.length] = new Option(vari[i][3],vari[i][2]);
}
i++;
}
}
</script>
</head>
<body>If M = 1 Then
CAMPOS = request.form("hidden1")
response.write CAMPOS
Else
%>
<form name="detalhes" id="detalhes" action="novo.asp?m=1" method="post">
<div id="camposTexto"></div><br>
<input type="button" value="Criar campo texto" name="add_input" id="add_input" onClick="addInput();">
<br><br><input type="submit" value="Enviar">
<br><input type="hidden" name="hidden1" id="hidden1" value="">
</form>O que eu pensei foi o seguinte, criar uma variavel de comunicação tipo assim:
var CAMPOSUB = "subdetalhe"+iCount
document.detalhes.CAMPOSUB.options
Tentei mas não deu certo pois não sou expert em Java, se tiver como por favor me fale como passar através de variavel, acho que fica mais fácil. Como eu disse, o primeiro campo está normal, pois o campo subdetalhe não tem um "rival" pra dividir informação, a partir do segundo campo gerado, ele trava pois não sabe pra quem vai passar o valor.
Galera, se não consegui explicar desculpe. Vocês podem ver o código neste LINK.
Desde já agradeço a ajuda.
Carregando comentários...