none
Array javascript mais ASP RRS feed

  • 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;color[:#]000000;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()==nStrAngel.toLowerCase().substring(0,txt.length)){
     match=true
     str+=('<option value="'+nStrAngel.replace(/\'/gi,'’')+'">'+nStrAngel+'</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

    sábado, 9 de agosto de 2008 04:47

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 %>');

    domingo, 10 de agosto de 2008 03:43
  •  

    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.




    domingo, 10 de agosto de 2008 04:09

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

    sábado, 9 de agosto de 2008 21:26
  • 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():Loop

    linha 119: sArray = Left(sArray,(sArray.length - 1))

    %>

     

     

    O que deve ser?

    domingo, 10 de agosto de 2008 02:41
  • Ao que parece é um problema nas áspas tenta assim

    sArray = sArray & char(34) & rsLoja("Nome") & char(34) & ","

    domingo, 10 de agosto de 2008 02:52
  • Deu esse erro:

     

    (0x800A000D)
    Tipos incompatíveis: 'char'
    /lojavivo/buscarprodutos.asp, line 116

    linha 116: sArray = sArray & char(34) & rsloja("nome") & char(34) & ","

     

    Não sei se tem a ver, mas no meu banco o campo está como nvarchar, tem a ver?

     

     

    domingo, 10 de agosto de 2008 03:01
  • não, não eu que viajei... é chr(34)

     

    domingo, 10 de agosto de 2008 03:07
  • ha certo,

    Mas voltamos para o mesmo erro:

     

    Objeto necessário: '"Loja B","Loja A",'
    /loja/buscarprodutos.asp, line 121

     

    linha 121: sArray = Left(sArray,(sArray.length - 1))

     

    domingo, 10 de agosto de 2008 03:10
  •  

    entendi, o erro está ocorrendo na concatenação da String com as áspas
    domingo, 10 de agosto de 2008 03:13
  • Eu não conheço bem array no ASP, então não consigo encontrar o errro...Qual a sintaxe da concatenação?

    domingo, 10 de agosto de 2008 03:25
  • Achei o erro de sintaxe, mais uma confusão pela falta de prática no ASP



    Code Snippet
    sArray = Left(sArray,(Len(sArray)-1))

     

     

    domingo, 10 de agosto de 2008 03:30
  • Resolveu, mas vou observar outro erro, que foi para o java script agora

     

    'arvore' não está definido

     

    Vou ver se encontro... Na verdade, em relação ao código original ela está ok... Não sei porque ele cobra essa definição...

     

    domingo, 10 de agosto de 2008 03:36
  • 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 %>');

    domingo, 10 de agosto de 2008 03:43
  •  

    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!

    domingo, 10 de agosto de 2008 03:50
  • 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

    domingo, 10 de agosto de 2008 03:53
  •  

    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():Loop

    sArray = Left(sArray,(Len(sArray) - 1))
    %>
    <Script>
    var arvore = new Array(<%= sArray %>);

     

     

    domingo, 10 de agosto de 2008 03:54
  • Correto, mas como eu disse, qual a função de cada sintaxe?

     

    Tipo Len(sArray) - 1?

     

    Gostaria que alguém comentasse sobre o codigo para titulo de aprendizagem mesmo!

    domingo, 10 de agosto de 2008 03:57
  •  

    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.




    domingo, 10 de agosto de 2008 04:09
  • ok, resolvido, obrigado mesmo!

    domingo, 10 de agosto de 2008 13:13