Hi
I can post here the modified js which does this:
1) when you click down arrow without anything in text box all list is opened
2) support for ids (like 101-apple, 102-orange)
Please let me know if it's helpfull in any way or if there are any errors.
//////actb.js
function actb(obj, ca, hid, ids) {
/* ---- Public Variables ---- */
this.actb_timeOut = -1;
// Autocomplete Timeout in ms (-1: autocomplete never time out)
this.actb_lim = 4;
// Number of elements autocomplete can show (-1: no limit)
this.actb_firstText = true;
// should the auto complete be limited to the beginning of keyword?
this.actb_mouse = true;
// Enable Mouse Support
this.actb_delimiter = new Array(';', ',');
// Delimiter for multiple autocomplete. Set it to empty array for single autocomplete
this.actb_startcheck = 1;
// Show widget only after this number of characters is typed in.
/* ---- Public Variables ---- */
/* ---- Private Variables ---- */
var actb_delimwords = new Array();
var actb_cdelimword = 0;
var actb_delimchar = new Array();
var actb_display = false;
var actb_pos = 0;
var actb_total = 0;
var actb_curr = null;
var actb_hidd = null;
var actb_rangeu = 0;
var actb_ranged = 0;
var actb_bool = new Array();
var actb_pre = 0;
var actb_toid;
var actb_tomake = false;
var actb_getpre = "";
var actb_mouse_on_list = 1;
var actb_kwcount = 0;
var actb_caretmove = false;
this.actb_keywords = new Array();
this.actb_ids = new Array();
/* ---- Private Variables---- */
this.actb_keywords = ca;
this.actb_ids = ids;
var actb_self = this;
function actb_clear(evt) {
if (!evt) evt = event;
removeEvent(document, "keydown", actb_checkkey);
removeEvent(actb_curr, "blur", actb_clear);
removeEvent(document, "keypress", actb_keypress);
actb_removedisp();
}
function actb_parse(n) {
if (actb_self.actb_delimiter.length > 0) {
var t = actb_delimwords[actb_cdelimword].trim().addslashes();
var plen = actb_delimwords[actb_cdelimword].trim().length;
} else {
var t = actb_curr.value.addslashes();
var plen = actb_curr.value.length;
}
var tobuild = '';
var i;
if (actb_self.actb_firstText) {
var re = new RegExp("^" + t, "i");
} else {
var re = new RegExp(t, "i");
}
var p = n.search(re);
for (i = 0; i < p; i++) {
tobuild += n.substr(i, 1);
}
tobuild += "<font style='" + (actb_self.actb_hStyle) + "'>"
for (i = p; i < plen + p; i++) {
tobuild += n.substr(i, 1);
}
tobuild += "</font>";
for (i = plen + p; i < n.length; i++) {
tobuild += n.substr(i, 1);
}
return tobuild;
}
function actb_generate() {
if (document.getElementById('tat_table')) {
actb_display = false;
document.body.removeChild(document.getElementById('tat_table'));
}
if (actb_kwcount == 0) {
actb_display = false;
return;
}
a = document.createElement('table');
a.cellSpacing = '1px';
a.cellPadding = '2px';
a.style.position = 'absolute';
a.style.top = eval(curTop(actb_curr) + actb_curr.offsetHeight) + "px";
a.style.left = curLeft(actb_curr) + "px";
a.style.backgroundColor = actb_self.actb_bgColor;
a.id = 'tat_table';
document.body.appendChild(a);
var i;
var first = true;
var j = 1;
if (actb_self.actb_mouse) {
a.onmouseout = actb_table_unfocus;
a.onmouseover = actb_table_focus;
}
var counter = 0;
for (i = 0; i < actb_self.actb_keywords.length; i++) {
if (actb_bool[i]) {
counter++;
r = a.insertRow(-1);
if (first && !actb_tomake) {
r.style.backgroundColor = actb_self.actb_hColor;
first = false;
actb_pos = counter;
} else if (actb_pre == i) {
r.style.backgroundColor = actb_self.actb_hColor;
first = false;
actb_pos = counter;
} else {
r.style.backgroundColor = actb_self.actb_bgColor;
}
r.id = 'tat_tr' + (j);
c = r.insertCell(-1);
c.style.color = actb_self.actb_textColor;
c.style.fontFamily = actb_self.actb_fFamily;
c.style.fontSize = actb_self.actb_fSize;
c.innerHTML = actb_parse(actb_self.actb_keywords[i]);
c.id = 'tat_td' + (j);
c.setAttribute('pos', j);
if (actb_self.actb_mouse) {
c.style.cursor = 'pointer';
c.onclick = actb_mouseclick;
c.onmouseover = actb_table_highlight;
}
j++;
}
if (j - 1 == actb_self.actb_lim && j < actb_total) {
r = a.insertRow(-1);
r.style.backgroundColor = actb_self.actb_bgColor;
c = r.insertCell(-1);
c.style.color = actb_self.actb_textColor;
c.style.fontFamily = 'arial narrow';
c.style.fontSize = actb_self.actb_fSize;
c.align = 'center';
replaceHTML(c, '\\/');
if (actb_self.actb_mouse) {
c.style.cursor = 'pointer';
c.onclick = actb_mouse_down;
}
break;
}
}
actb_rangeu = 1;
actb_ranged = j - 1;
actb_display = true;
if (actb_pos <= 0) actb_pos = 1;
}
function actb_remake() {
document.body.removeChild(document.getElementById('tat_table'));
a = document.createElement('table');
a.cellSpacing = '1px';
a.cellPadding = '2px';
a.style.position = 'absolute';
a.style.top = eval(curTop(actb_curr) + actb_curr.offsetHeight) + "px";
a.style.left = curLeft(actb_curr) + "px";
a.style.backgroundColor = actb_self.actb_bgColor;
a.id = 'tat_table';
if (actb_self.actb_mouse) {
a.onmouseout = actb_table_unfocus;
a.onmouseover = actb_table_focus;
}
document.body.appendChild(a);
var i;
var first = true;
var j = 1;
if (actb_rangeu > 1) {
r = a.insertRow(-1);
r.style.backgroundColor = actb_self.actb_bgColor;
c = r.insertCell(-1);
c.style.color = actb_self.actb_textColor;
c.style.fontFamily = 'arial narrow';
c.style.fontSize = actb_self.actb_fSize;
c.align = 'center';
replaceHTML(c, '/\\');
if (actb_self.actb_mouse) {
c.style.cursor = 'pointer';
c.onclick = actb_mouse_up;
}
}
for (i = 0; i < actb_self.actb_keywords.length; i++) {
if (actb_bool[i]) {
if (j >= actb_rangeu && j <= actb_ranged) {
r = a.insertRow(-1);
r.style.backgroundColor = actb_self.actb_bgColor;
r.id = 'tat_tr' + (j);
c = r.insertCell(-1);
c.style.color = actb_self.actb_textColor;
c.style.fontFamily = actb_self.actb_fFamily;
c.style.fontSize = actb_self.actb_fSize;
c.innerHTML = actb_parse(actb_self.actb_keywords[i]);
c.id = 'tat_td' + (j);
c.setAttribute('pos', j);
if (actb_self.actb_mouse) {
c.style.cursor = 'pointer';
c.onclick = actb_mouseclick;
c.onmouseover = actb_table_highlight;
}
j++;
} else {
j++;
}
}
if (j > actb_ranged) break;
}
if (j - 1 < actb_total) {
r = a.insertRow(-1);
r.style.backgroundColor = actb_self.actb_bgColor;
c = r.insertCell(-1);
c.style.color = actb_self.actb_textColor;
c.style.fontFamily = 'arial narrow';
c.style.fontSize = actb_self.actb_fSize;
c.align = 'center';
replaceHTML(c, '\\/');
if (actb_self.actb_mouse) {
c.style.cursor = 'pointer';
c.onclick = actb_mouse_down;
}
}
}
function actb_goup() {
if (!actb_display) return;
if (actb_pos == 1) return;
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_bgColor;
actb_pos--;
if (actb_pos < actb_rangeu) actb_moveup();
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_hColor;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
function actb_godown() {
if (!actb_display) return;
if (actb_pos == actb_total) return;
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_bgColor;
actb_pos++;
if (actb_pos > actb_ranged) actb_movedown();
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_hColor;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
function actb_movedown() {
actb_rangeu++;
actb_ranged++;
actb_remake();
}
function actb_moveup() {
actb_rangeu--;
actb_ranged--;
actb_remake();
}
/* Mouse */
function actb_mouse_down() {
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_bgColor;
actb_pos++;
actb_movedown();
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_hColor;
actb_curr.focus();
actb_mouse_on_list = 0;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
function actb_mouse_up(evt) {
if (!evt) evt = event;
if (evt.stopPropagation) {
evt.stopPropagation();
} else {
evt.cancelBubble = true;
}
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_bgColor;
actb_pos--;
actb_moveup();
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_hColor;
actb_curr.focus();
actb_mouse_on_list = 0;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
function actb_mouseclick(evt) {
if (!evt) evt = event;
if (!actb_display) return;
actb_mouse_on_list = 0;
actb_pos = this.getAttribute('pos');
actb_penter();
}
function actb_table_focus() {
actb_mouse_on_list = 1;
}
function actb_table_unfocus() {
actb_mouse_on_list = 0;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
function actb_table_highlight() {
actb_mouse_on_list = 1;
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_bgColor;
actb_pos = this.getAttribute('pos');
while (actb_pos < actb_rangeu) actb_moveup();
while (actb_pos > actb_ranged) actb_movedown();
document.getElementById('tat_tr' + actb_pos).style.backgroundColor = actb_self.actb_hColor;
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
}
/* ---- */
function actb_insertword(a) {
if (actb_self.actb_delimiter.length > 0) {
str = '';
l = 0;
for (i = 0; i < actb_delimwords.length; i++) {
if (actb_cdelimword == i) {
prespace = postspace = '';
gotbreak = false;
for (j = 0; j < actb_delimwords[i].length; ++j) {
if (actb_delimwords[i].charAt(j) != ' ') {
gotbreak = true;
break;
}
prespace += ' ';
}
for (j = actb_delimwords[i].length - 1; j >= 0; --j) {
if (actb_delimwords[i].charAt(j) != ' ') break;
postspace += ' ';
}
str += prespace;
str += a;
l = str.length;
if (gotbreak) str += postspace;
} else {
str += actb_delimwords[i];
}
if (i != actb_delimwords.length - 1) {
str += actb_delimchar[i];
}
}
actb_curr.value = str;
setCaret(actb_curr, l);
} else {
actb_curr.value = a;
}
actb_mouse_on_list = 0;
actb_removedisp();
}
function actb_inserthidden(index) {
if (actb_hidd)
actb_hidd.value = ids[index];
}
/*
Function executed when an option is selected
*/
function actb_penter() {
if (!actb_display) return;
actb_display = false;
var word = '';
var word_index = 0;
var c = 0;
for (var i = 0; i <= actb_self.actb_keywords.length; i++) {
if (actb_bool[i]) c++;
if (c == actb_pos) {
word = actb_self.actb_keywords[i];
word_index = i
break;
}
}
//alert('here we can handle an hidden with some database id values');
actb_insertword(word);
actb_inserthidden(word_index);
l = getCaretStart(actb_curr);
}
function actb_removedisp() {
if (actb_mouse_on_list == 0) {
actb_display = 0;
if (document.getElementById('tat_table')) {
document.body.removeChild(document.getElementById('tat_table'));
}
if (actb_toid) clearTimeout(actb_toid);
}
}
function actb_keypress(e) {
if (actb_caretmove) stopEvent(e);
return !actb_caretmove;
}
function actb_checkkey(evt) {
if (!evt) evt = event;
a = evt.keyCode;
caret_pos_start = getCaretStart(actb_curr);
actb_caretmove = 0;
switch (a) {
case 38:
actb_goup();
actb_caretmove = 1;
return false;
break;
case 13: case 9:
if (actb_display) {
actb_caretmove = 1;
actb_penter();
return false;
} else {
return true;
}
break;
case 40:
if (actb_curr.value != '') {
actb_godown();
actb_caretmove = 1;
return false;
break;
}
default:
setTimeout(function() {
actb_tocomplete(a)
}, 50);
break;
}
}
function actb_tocomplete(kc) {
if (kc == 38 || (kc == 40 && actb_curr.value != '') || kc == 13) return;
var i;
if (actb_display) {
var word = 0;
var c = 0;
for (var i = 0; i <= actb_self.actb_keywords.length; i++) {
if (actb_bool[i]) c++;
if (c == actb_pos) {
word = i;
break;
}
}
actb_pre = word;
} else {
actb_pre = -1;
}
delim_split = '';
for (i = 0; i < actb_self.actb_delimiter.length; i++) {
delim_split += actb_self.actb_delimiter[i];
}
delim_split = delim_split.addslashes();
delim_split_rx = new RegExp("([" + delim_split + "])");
c = 0;
actb_delimwords = new Array();
actb_delimwords[0] = '';
for (i = 0,j = actb_curr.value.length; i < actb_curr.value.length; i++,j--) {
if (actb_curr.value.substr(i, j).search(delim_split_rx) == 0) {
ma = actb_curr.value.substr(i, j).match(delim_split_rx);
actb_delimchar[c] = ma[1];
c++;
actb_delimwords[c] = '';
} else {
actb_delimwords[c] += actb_curr.value.charAt(i);
}
}
var l = 0;
actb_cdelimword = -1;
for (i = 0; i < actb_delimwords.length; i++) {
if (caret_pos_end >= l && caret_pos_end <= l + actb_delimwords[i].length) {
actb_cdelimword = i;
}
l += actb_delimwords[i].length + 1;
}
var ot = actb_delimwords[actb_cdelimword].trim();
var t = actb_delimwords[actb_cdelimword].addslashes().trim();
} else {
var ot = actb_curr.value;
var t = actb_curr.value.addslashes();
}
//patch to permit swohing the entire list
if (kc == 40 && actb_curr.value == '') {
actb_total = 0;
actb_tomake = false;
actb_kwcount = 0;
for (i = 0; i < actb_self.actb_keywords.length; i++) {
actb_bool[i] = false;
if (actb_self.actb_keywords[i] != '' && actb_self.actb_keywords[i]) {
if (actb_curr.value == '') {
actb_curr.value = actb_self.actb_keywords[i];
}
actb_total++;
actb_bool[i] = true;
actb_kwcount++;
if (actb_pre == i) actb_tomake = true;
}
}
if (actb_toid) clearTimeout(actb_toid);
if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function() {
actb_mouse_on_list = 0;
actb_removedisp();
}, actb_self.actb_timeOut);
return actb_generate();
}
if (ot.length == 0) {
actb_mouse_on_list = 0;
actb_removedisp();
}
if (ot.length < actb_self.actb_startcheck) return this;
if (actb_self.actb_firstText) {
var re = new RegExp("^" + t, "i");
} else {
var re = new RegExp(t, "i");
}
actb_total = 0;
actb_tomake = false;
actb_kwcount = 0;
for (i = 0; i < actb_self.actb_keywords.length; i++) {
actb_bool[i] = false;
if (re.test(actb_self.actb_keywords[i])) {
actb_total++;
actb_bool[i] = true;
actb_kwcount++;
if (actb_pre == i) actb_tomake = true;
}
}
Hello, I would also like to drop the list down triggered by an external JavaScript command, e.g. by clicking a separate button.
The code you posted, claudiu, doesn't work like expected, nothing happens when I press the arrow-down-key on my keyboard (but it should do so, right?).
I just replaced the actb.js file with the one you provided, but nothing changed (it works like before, no errors, ...)
I would like to get array from SQL query. Example: user type letter "A" and then php script selects from Oracle database all word begining with A.
How can it be done? Where should I insert my query function js?
function processReqChange() {
if (req.readyState == 4) {
if (req.status == 200) {
if (req.responseText.substr(0,9)!='redirect;') {
//document.getElementById("debugArea").innerHTML += req.responseText;
//alert (req.responseText);
actb_self.actb_keywords = eval(req.responseText);
} else {
document.location='/ru/start/?'+req.responseText.substr(9);
}
} else {
alert("There was a problem retrieving the XML data:\n" + req.statusText);
}
}
}
Then after
}else{
var ot = actb_curr.value;
var t = actb_curr.value.addslashes();
}
I have added this code
if (ot.length == 1 && actb_letter != ot) {
actb_letter = ot;
actb_self.actb_keywords = Array();
ot = ot.toLowerCase();
loadXMLDoc('autocomplete.php?letter='+encodeURI(ot));
//actb_self.actb_keywords = eval(req.responseText);
}
autocomplete.php is a simple php to select words in database...
here autocomplete.php part of php
$Arr = Array();
//Поиск ключевых слов - atcb.js
if ((isset($_GET['letter'])) && ($_GET['letter']!='')) {
$letter=urldecode(iconv("UTF-8", "CP1251", htmlspecialchars($_GET['letter'], ENT_QUOTES)));
$letter=$letter."%";
$stid = OCIParse($conn,"SELECT key_word,count(id_pid) NUM FROM thesaurus WHERE key_word LIKE :word GROUP BY key_word");
ocibindbyname($stid,':word', $letter);
OCIExecute($stid);
$n=OCIFetchStatement($stid, $public);
header("Content-type: text/plain; charset=windows-1251");
if ($n>0) {
echo "Array('".implode("','",$public['KEY_WORD'])."')";
} else {
echo "Array()";
}
}
My name is Kageyama who is member of the company which operates website, "Let's Enjoy Tokyo".
In our web site, our company wants to get your permission to use your library, "Auto-complete Control".
We want to make sure about license notes.
Right now, we put license notes in HTML source like bellow.
------------------- HTML source begin -------------------------------
------------------- HTML source end -------------------------------
If you can give us permission not to put license notes in our web site, we want to leave out license note from our web site.
#Let'sEnjoyTOKYO
http://www.enjoytokyo.jp
#page using library
http://www.enjoytokyo.jp/OD003Top.html?ODEKAKE_ID=4isince 2005/11/1j
I've got multiple controls on the one page (created via DOM). They are all working in IE and Firefox however I get this error in IE: Invalid Argument, line 99 char 3.
The line is in bold below.
Any ideas why this is happening? As I said its still working but I would rather not see the javascript error.
Thanks
// Get the start position of the caret in the object
function getCaretStart(obj){
if(typeof obj.selectionStart != "undefined"){
return obj.selectionStart;
}else if(document.selection&&document.selection.createRange){
var M=document.selection.createRange();
try{
var Lp = M.duplicate();
Lp.moveToElementText(obj);
}catch(e){
var Lp=obj.createTextRange();
} Lp.setEndPoint("EndToStart",M);
var rb=Lp.text.length;
if(rb>obj.value.length){
return -1;
}
return rb;
}
}
The script is great, but something happend when using the auto-complete box in a text field located above a combo-box field. I mean, the box appears below the fields, becoming invisible in that point. This problem happend only in Internet Explorer 6.0.
How can i make the auto-complete list appear above the combo-box field?
A help is very welcome, thank you.
PS: Sorry if i write to many errors, i'm not american and my english is not perfect.
Like all the others I would like to thank You for the great work.
Using the script I am missing one feature. When in first position of the textfield and pressing the down arrow I would like the whole list of items to appear. I have myself tried to figure out how to achieve this, but my JS skills don't help me. I guess I am a newbie.
Thanks a lot for this excellent script! I was looking around for different scripts to add this feature to my web site and tried a few different ones. However, this one was by far the best. I really appreciated that it could deal with multiple words in a field and provide auto-complete for each individual word (I added a space as word delimiter). This was great!
I also modified the colors so it looks a lot like a browsers own drop-down list. Really neat.
If I move the cursor down it just jump to the input field when i comes to the arrow (\/).
If I use the mouse it works fine. Allsom going op after using the mouse to go down.
I don't know if this will come in handy for any of you...
anyway i have shortly found a easy solution to that wich was my problem.
I am using a MYSQL server and i do use the MYSQL connector.net
i already had my code to get the word list serverside, i wanted to update the word list in the onpageload of an aspx page.
I added a very easy new jscript "JScript1.js" to the solution
function FILLIT(){<br />
var arr1=new Array('this','is','the','word','list');<br />
var obj1 = actb(document.getElementById('tb'),arr1);<br />
return obj1;<br />
}
and registered it into the html page
the page stuff looked like this:
after that i just had to work on the server code... rudely, the sub overwrites JScrip1.js with an equal script, BUT with the values i had on servercode.
Private Sub FillNameBox(ByVal Values() As String)<br />
Dim PPL As String = "var arr1=new Array("<br />
Dim i As Integer<br />
For i = 0 To Values.Length - 1<br />
PPL = PPL + "'" + Values(i) + "',"<br />
Next<br />
PPL = PPL.Remove(PPL.Length - 1, 1)<br />
PPL = PPL + ");"<br />
Dim Sw As New IO.StreamWriter(Server.MapPath("JScript1.js"), False)<br />
Sw.WriteLine("function FILLIT(){")<br />
Sw.WriteLine(PPL)<br />
Sw.WriteLine("var obj1 = actb(document.getElementById('tb'),arr1);")<br />
Sw.WriteLine("return obj1;")<br />
Sw.WriteLine("}")<br />
Sw.Flush()<br />
Sw.Close()<br />
End Sub
that's it!
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />
Dim newwlist(4) As String<br />
newwlist(0) = "this"<br />
newwlist(1) = "are"<br />
newwlist(2) = "the"<br />
newwlist(3) = "new"<br />
newwlist(4) = "words"<br />
FillNameBox(newwlist)<br />
End Sub
quite rude because of ovewriting the JScript, but very efficent.
GLORY to actb)
<- true inside to understand outside ->
-- modified at 23:32 Wednesday 21st September, 2005
In the array i'm putting data have been retrieved from db.
These words contain special characters such as & or '.
I've manipulated the special charaters to their code in js, if not JS throw and error when creating the array.
When trying to search on it with the regexp it relates to the code of the special characters as string so if typing & in finds me or & and etc.
i want to use the change event to submit the form after changing the input, but i think that because of the the keypressed (or not...) the change event does not been fired after a change...
second, can it use binary search to make the search faster if i want it be limited to the beginning of keyword.
The CC license says that if I want to use your code I need to give you attribution in a way that you agree with.
I have a section on my website for listing what software has been used, can I just add a link to your article and say something like "zichun's code helped with the auto-complete feature"?
Hi
I'm JavaScript beginner and would like to know,
if you can give me some hints/tips, how I can use your script
for a textarea on this site:
http://www.matheclipse.org
I would like to get an autocomplete with description, when
the user tpes the beginning of a math function like:
'as'
the Autocomplete function should suggest
'ACos - arc cosine'
'ASin...'
'ATan...'
...
and if the user clicks for example the first line a ACos[] should be inserted
into the textarea.
If the user again types some characters the autocomplete should show up again.
Is this possible with JavaScript?
Last Visit: 31-Dec-99 18:00 Last Update: 26-Sep-24 4:59