Avatar billede bigo Nybegynder
18. maj 2010 - 07:58 Der er 10 kommentarer og
1 løsning

scriptaculous: autocomplete på flere forskellige inputs

Hejsa.

Jeg prøver og lave noget autocomplete med scriptaculous.

Det jeg har er et felt (ip$x hvor $x er en "linietæller").
Står den alene (uden $x) kan jeg godt få det til at fungere, men jeg har en "tilføj linie" knap hvor der tilføjes linie til en <div> hvor der også skal være en autocomplete.. og så taber jeg lidt span her..

[code] -> Der ikke helt virker.
function getCustomerData(element, entry)
{
    return $('cust_id').getValue();
}

function eventDateCallback(element, entry)
{
    cust_id = getCustomerData(element, entry);
  alert(entry + '?q=' + $('assetInterfaceID'+x+'IP').getValue() + '&counter='+x+'&c_id='+cust_id);
    return entry + '?q=' + $('assetInterfaceID'+x+'IP').getValue() + '&counter='+x+'&c_id='+cust_id;
}

function ajax_autocomplete(x)
{
    new Ajax.Autocompleter('assetInterfaceID'+ x + 'IP', 'autocomplete_choices'+x,'printiphint.php',
        {
            fullSearch: true, frequency: 0, minChars: 1, callback: eventDateCallback
        }
    );
}


kaldes:
<input type=text name='aI[$x][ip]' id='aIID".$x."IP' onfocus='ajax_autocomplete(".$x.");' value='".long2ip($i_a[$x]["i_ip_s"])."'>

<div id='autocomplete_choices".$x."' class='autocomplete'></div>

[/code]

Så egentlig - pr. linie en ny autocomplete.. dynamisk isat.
Avatar billede bigo Nybegynder
18. maj 2010 - 08:02 #1
ok, det var vist ikke lige det jeg regnede med i koden ;-) Sorry..
Avatar billede majbom Novice
18. maj 2010 - 08:21 #2
prøv at sæt rundt pre tags rundt om koden, i stedet for code tags
Avatar billede bigo Nybegynder
18. maj 2010 - 08:35 #3
<pre>

function getCustomerData(element, entry)
{
return $('cust_id').getValue();
}

function eventDateCallback(element, entry)
{
cust_id = getCustomerData(element, entry);
alert(entry + '?q=' + $('assetInterfaceID'+x+'IP').getValue() + '&counter='+x+'&c_id='+cust_id);
return entry + '?q=' + $('assetInterfaceID'+x+'IP').getValue() + '&counter='+x+'&c_id='+cust_id;
}

function ajax_autocomplete(x)
{
new Ajax.Autocompleter('assetInterfaceID'+ x + 'IP', 'autocomplete_choices'+x,'printiphint.php',
{
fullSearch: true, frequency: 0, minChars: 1, callback: eventDateCallback
}
);
}


<input type=text name='aI[$x][ip]' id='aIID".$x."IP' onfocus='ajax_autocomplete(".$x.");' value='".long2ip($i_a[$x]["i_ip_s"])."'>

<div id='autocomplete_choices".$x."' class='autocomplete'></div>

</pre>
Avatar billede jokkejensen Novice
18. maj 2010 - 09:14 #4
hvis det er JS er det:

id='aIID'+$x+"' altså + for at streng concatinere
Avatar billede jokkejensen Novice
18. maj 2010 - 09:15 #5
... never mind :)
Avatar billede bigo Nybegynder
18. maj 2010 - 09:26 #6
måske man skal gøre noget ala:

<pre>

onFocus="java script:
var options = {
script: function (q, cust_id) { return ('printiphint.php?q='+q+'&c_id=´+cust_id); },
callback: function (obj) { $('cust_id').getValue(); }
};
var xml=new AutoComplete('assetInterfaceID$xIP',options);return true;" value="" />
</pre>

eller sådan noget.. ved ikke lige hvordan jeg skal hive data ud fra 'formen' vedr. cust_id (hidden felt)
Avatar billede jokkejensen Novice
18. maj 2010 - 09:32 #7
har du ikke et link til det, det er lidt svært at se hvad der egentligt sker uden at debugge.
Avatar billede bigo Nybegynder
18. maj 2010 - 09:53 #8
Hmm.. det lader til at mit største problem (efter at have fidlet lidt med det..) er at jeg ikke kan få en div til at makke ret... s*tan osse...

Den gider tydeligvis ikke at jeg indsætter en div i en tbody - og derfor ikke viser den korrekt..
Avatar billede jokkejensen Novice
18. maj 2010 - 09:56 #9
ja den skal ind i en celle -> i en række.

/J
Avatar billede bigo Nybegynder
18. maj 2010 - 18:14 #10
tror jeg har fundet problemet..

Jeg laver en:
<pre>
            function add_interface_line(counter, customerid, assetid)
            {
                if (window.XMLHttpRequest)
                  {// code for IE7+, Firefox, Chrome, Opera, Safari
                  xmlhttp=new XMLHttpRequest();
                  }
                else
                  {// code for IE6, IE5
                  xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
                  }
                xmlhttp.onreadystatechange=function()
                  {
                  if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                            var newdiv = document.createElement('div');
                            newdiv.innerHTML = xmlhttp.responseText;
                            var container = document.getElementById('newinterface');
                            container.appendChild(newdiv);
                    }
                  }
                xmlhttp.open('GET','printnewinterface.php?q='+counter+'&c_id='+customerid+'&a_id='+assetid,true);
                xmlhttp.send();
            }
</pre>

hvor printnewinterface.php bl.a. smider:

<pre>
<script type='text/javascript' language='javascript'>
function eventDateCallback(element, entry)
{
    alert (entry + '&q=' + $('assetInterfaceID_".$x."_IP').getValue() + '&counter=".$x."&c_id=".$customer_id."');
    return entry + '&q=' + $('assetInterfaceID_".$x."_IP').getValue() + '&counter=".$x."&c_id=".$customer_id."';
}

new Ajax.Autocompleter(
    'assetInterfaceID_".$x."_IP',
    'autocomplete_choices','printiphint.php',
    {
        fullSearch: true, frequency: 0, minChars: 1, callback: eventDateCallback
    }
);
</script>
</pre>

ind i eksisterende kode..

og det er meget godt altsammen.. men den får jo ikke lavet en event på ajax.autocompleter dimsen..

hvordan så det?!?!?!?!
Avatar billede bigo Nybegynder
18. maj 2010 - 19:47 #11
Løst.. Aktiver script med tæller efter indsættelse af skidtet i divén...

<pre>
            function add_interface_line(counter, customerid, assetid)
            {
                if (window.XMLHttpRequest)
                  {// code for IE7+, Firefox, Chrome, Opera, Safari
                  xmlhttp=new XMLHttpRequest();
                  }
                else
                  {// code for IE6, IE5
                  xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
                  }
                xmlhttp.onreadystatechange=function()
                  {
                  if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                            var newdiv = document.createElement('div');
                            newdiv.innerHTML = xmlhttp.responseText;
                            var container = document.getElementById('newinterface');
                            container.appendChild(newdiv);
                                new Ajax.Autocompleter
                                (
                                    'assetInterfaceID_'+counter+'_IP',
                                    'autocomplete_choices','printiphint.php',
                                    {
                                        fullSearch: true, frequency: 0, minChars: 1, callback: eventDateCallback
                                    }
                                )

                    }
                  }
                xmlhttp.open('GET','printnewinterface.php?q='+counter+'&c_id='+customerid+'&a_id='+assetid,true);
                xmlhttp.send();
            }


</pre>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester