Usuário com melhor resposta
Array javascript mais ASP

Pergunta
-
Pessoal, tenho esse array:
Se quiserem pode ver ele rodando: http://www.ideiabiz.com/completar.htm
------------------------------------------------------------------------------------------------------------------------
<INPUT id=textbox1
onkeyup=checkList(this,arvore) name=Tcodigos size="20"> </TD></TR></TBODY></TABLE>
<SCRIPT>
var arvore = new Array("abcdefghije",
"aTestando!!!!",
"ahahaha",
"atesteee",
"abc", "abt",
"acd", "aaaaat",
"agoogle.com",
"aimasters.com.br",
"A_vitor",
"ateste",
"ajavascript",
"autocompletar",
"asp",
"aaaaaaaaaaaaaaaa",
"a");
------------------------------------------------------------------------------------------------------------------------
E todos podem ver uma lista aí...Como faço então para essa lista do array vim do banco de dados?
Tentei algo assim mas não deu:
------------------------------------------------------------------------------------------------------------------------
<input id=textbox1 onkeyup=checkList(this,arvore) type="text" name="busca" size="36" style="font-family: Verdana; font-size: 10 px; color: #3A5278; border: 1px solid #3A5278; background-color
EEEEEE"><font face="Verdana" style="font-size: 8pt" color="#2A2A2A">
</font>
<SCRIPT>
var arvore = new Array("<% do while not rsloja.eof %> <%=rsloja("nome")%>" <% rsloja.MoveNext loop%>);------------------------------------------------------------------------------------------------------------------------
Para quem quer ver o código todo, segue:
------------------------------------------------------------------------------------------------------------------------
<INPUT id=textbox1
onkeyup=checkList(this,arvore) name=Tcodigos size="20"> </TD></TR></TBODY></TABLE>
<SCRIPT>
var arvore = new Array("abcdefghije",
"aTestando!!!!",
"ahahaha",
"atesteee",
"abc", "abt",
"acd", "aaaaat",
"agoogle.com",
"aimasters.com.br",
"A_vitor",
"ateste",
"ajavascript",
"autocompletar",
"asp",
"aaaaaaaaaaaaaaaa",
"a");
document.write('<style type="text/css">'+
'#listHolder{position:absolute;border:0;}'+
'.list{font-family:verdana;font-size:10;color000000;background:;}'+
'<\/style>')
function checkList(obj,nStr) {
var k = event.keyCode;
var T = findPosY(obj); //top
var L = findPosX(obj); //left
var list = document.getElementById('listHolder');
if(!list) {
var list = document.createElement('DIV');
list.id = 'listHolder';
document.body.appendChild(list);
}
list.style.top=(T+obj.offsetHeight);
list.style.left=L;
list.style.display='none';
var txt=obj.value;
if (txt) {
var str='<select class="list"'+
'onclick="setOption(\''+obj.id+'\',this.options[this.selectedIndex].value)"'+
'onkeyup="if(event.keyCode==13){setOption(\''+obj.id+'\','+
'this.options[this.selectedIndex].value)};if(event.keyCode==27){'+
'document.getElementById(\'listHolder\').style.display=\'none\';'+
'document.getElementById(\''+obj.id+'\').focus()};" id="selector" size="6">'
var match=false
for(a=0;a<nStr.length;a++){
if(txt.toLowerCase()==nStr.toLowerCase().substring(0,txt.length)){
match=true
str+=('<option value="'+nStr.replace(/\'/gi,'’')+'">'+nStr
+'</option>')
}
}
str+='</select>'
if(match){
list.innerHTML=str
list.style.display='block'
var sel=document.getElementById('selector')
if(k=='40') {
sel.focus()
}
if(k=='13'){
document.getElementById('listHolder').style.display='none'
}
}
}
}
function setOption(obj,val){
var obj=document.getElementById(obj)
obj.value=val;
obj.focus()
document.getElementById('listHolder').style.display='none'
}
function findPosX(obj){
var curleft=0;
if(obj.offsetParent) {
while(obj.offsetParent){
curleft+=obj.offsetLeft
obj=obj.offsetParent;
}
} else if(obj.x)
curleft+=obj.x;
return curleft;
}
function findPosY(obj){
var curtop=0;
if(obj.offsetParent){
while(obj.offsetParent){
curtop+=obj.offsetTop
obj=obj.offsetParent;
}
} else if(obj.y)
curtop+=obj.y;
return curtop;
}
</SCRIPT>
</FORM>------------------------------------------------------------------------------------------------------------------------
Obrigado!
Marcelo
Respostas
-
Deve ser isso agora
Code Snippet<Script>
var arvore = new Array("<%= sArray %>");Confira no código-fonte gerado no browser se o array está sendo escrito corretamente no javascript
Tente sem as áspas ou com áspas simples
<Script>
var arvore = new Array(<%= sArray %>);<Script>
var arvore = new Array('<%= sArray %>'); -
Como a concatenação foi feita da seguinte forma: sArray é igual a ele mesmo, mais um item e mais uma vírgula
Dessa forma na última passagem pelo loop o sArray conteria todos os itens e mais uma vírgula no final.
Para eliminá-la eu igualei o sArray ao seu conteúdo menos o últimpo item:
- o método Left(string,int) retorna o número de caracteres da string indicado pelo parâmetro int
- o método Len(string) retorna o número de caracteres de uma string
Como a idéia era eliminar o último caracter sArray é igual a todos os seus caracateres à esquerda -1 (o último)
Espero ter exclarecido a sua dúvida.
Todas as Respostas
-
Total Gambiarra, mas deverá funcionar.
Code Snippet<%
Dim sArray = ""
Do While not rsloja.EOF
sArray = sArray & """" & rsLoja("Nome") & ""","
rsLoja.MoveNext():Loop
sArray = Left(sArray,(sArray.length - 1))
%>
<Script>
var arvore = new Array("<%= sArray %>");Bom a idéia é essa, é preciso dar uma revisada na sintaxe, pois faz muito tempo que eu não trabalho com ASP e não me lembro direito.
Não é a melhor solução, mas dá para partir por aí.
Se essa resposta solucionou o seu problema, por favor não deixe de marcar
Abraço -
Leandro,
Corrigir um erro que foi Dim sArray = "" para Dim sArray e depois coloquei o sArray = ""
Mas aí veio outro erro:
Deu o seguinte erro:
Objeto necessário: '"Loja B","Loja A",'
/loja/buscarprodutos.asp, line 119
Esse nome "loja B", "Loja A" são os conteúdos do banco de dados.
Código:
Code Snippet<%Dim sArray
sArray = ""Do While not rsloja.EOF
sArray = sArray & """" & rsloja("nome") & ""","
rsloja.MoveNext():Looplinha 119: sArray = Left(sArray,(sArray.length - 1))
%>
O que deve ser?
-
-
-
-
-
-
-
-
-
Deve ser isso agora
Code Snippet<Script>
var arvore = new Array("<%= sArray %>");Confira no código-fonte gerado no browser se o array está sendo escrito corretamente no javascript
Tente sem as áspas ou com áspas simples
<Script>
var arvore = new Array(<%= sArray %>);<Script>
var arvore = new Array('<%= sArray %>'); -
Deve ser sem aspas nenhuma, pois se observarmos o Array do ASP já manda o SArray com aspas, então se mantermos aspas também no javascript acaba tendo aspas de mais, pois será aspas vindo do ASP e aspas vindo do script...
Então, tirei as aspas do javascript como você falou e funcionou!
Obrigado mesmo!
Abraço!
-
OBS:
Por conhecimento mesmo, depois com tempo gostaria que alguém comentasse esse código, qual a função de cada sintaxe...
<%Dim sArray
sArray = ""
Do While not rsloja.EOF
sArray = sArray & chr(34) & rsloja("nome") & chr(34) & ","rsloja.MoveNext():Loop
sArray = Left(sArray,(Len(sArray)-1))
%>
Obrigado!
Marcelo
-
Vamos deixar a solução correta registrada aqui então
Code Snippet<%
Dim sArray
Do While not rsloja.EOF
sArray = sArray & chr(34) & rsLoja("Nome") & chr(34) & ","
rsLoja.MoveNext():LoopsArray = Left(sArray,(Len(sArray) - 1))
%>
<Script>
var arvore = new Array(<%= sArray %>); -
-
Como a concatenação foi feita da seguinte forma: sArray é igual a ele mesmo, mais um item e mais uma vírgula
Dessa forma na última passagem pelo loop o sArray conteria todos os itens e mais uma vírgula no final.
Para eliminá-la eu igualei o sArray ao seu conteúdo menos o últimpo item:
- o método Left(string,int) retorna o número de caracteres da string indicado pelo parâmetro int
- o método Len(string) retorna o número de caracteres de uma string
Como a idéia era eliminar o último caracter sArray é igual a todos os seus caracateres à esquerda -1 (o último)
Espero ter exclarecido a sua dúvida. -