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.
Hi axelclk,
I was posted the message "Display description, bar, and bug for last version of actb.js" and I was explained how display a description after keyword. Your suggestion about function mathematic is good utilisation about this autocomplete component. You say "if the user clicks for example the first line a ACos[] should be inserted into the textarea", but I think it will better to place cursor bettwen the [] for ACos (position -1) and place cursor after PI for PI (position = 0).
Today actb use an array of String, but I think it's better to use an array of object in order to customize each item of list of autocomplete. Si I create a new file actbitem, which contain an information about keyword, description of keyword and caret position.
So now customarray is not an array of string but an array of actbitem :
var customarray=new Array(
new actbitem("cos[]","function cosinus",-1), ....)
<html>
<head>
<!-- CODE ADDED : include javascript actbitem-->
<script language="javascript" type="text/javascript" src="actbitem.js"></script>
<script language="javascript" type="text/javascript" src="actb.js"></script>
<script language="javascript" type="text/javascript" src="common.js"></script>
<script>
var customarray=new Array(
new actbitem("cos[]","function cosinus",-1),
new actbitem("sin[]","function sinus",-1),
new actbitem("tan[]","function tangante",-1),
new actbitem("sum[]","function sum",-1),
new actbitem("sum","function sum without []"),
new actbitem("Pi","3.14"));
function actb(obj,ca){
/* ---- 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 = false; // 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_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();
/* ---- Private Variables---- */
// CODE ADDED : ca is not more an Array of String but now an Array of actbitem
// construct actb_keywords
for(var i=0; i< ca.length;i++) {
var item = ca[i];
this.actb_keywords[i] = item.keyword;
}
this.actb_actbitems = ca;
var actb_self = this;
actb_curr = obj;
addEvent(actb_curr,"focus",actb_setup);
// code ADDED : function which returns code with description
function actb_codedesc(code, desc) {
return code + " : " + "<font style='"+(actb_hStyleDesc)+"'>" + desc + "</font>";
}
function actb_setup(){
addEvent(document,"keydown",actb_checkkey);
addEvent(actb_curr,"blur",actb_clear);
addEvent(document,"keypress",actb_keypress);
}
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;
// code ADDED : for dispaly code and description
// Get Code
var code = actb_parse(actb_self.actb_actbitems[i].keyword)
// Get Description
var desc = actb_self.actb_actbitems[i].description;
c.innerHTML = actb_codedesc(code, desc);
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;
// code ADDED : for dispaly code and description
// Get Code
var code = actb_parse(actb_self.actb_actbitems[i].keyword)
// Get Description
var desc = actb_self.actb_actbitems[i].description;
c.innerHTML = actb_codedesc(code, desc);
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, caret_pos){
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];
}
}
l = l + caret_pos;
actb_curr.value = str;
setCaret(actb_curr,l);
}else{
actb_curr.value = a;
}
actb_mouse_on_list = 0;
actb_removedisp();
}
function actb_penter(){
if (!actb_display) return;
actb_display = false;
var word = '';
var caret_pos = 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];
// CODE ADDED : caret position
caret_pos = actb_self.actb_actbitems[i].caret_pos;
if (caret_pos ==null)
caret_pos = 0;
break;
}
}
actb_insertword(word, caret_pos);
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 40:
actb_godown();
actb_caretmove = 1;
return false;
break;
case 13: case 9:
if (actb_display){
actb_caretmove = 1;
actb_penter();
return false;
}else{
return true;
}
break;
default:
setTimeout(function(){actb_tocomplete(a)},50);
break;
}
}
function actb_tocomplete(kc){
if (kc == 38 || kc == 40 || 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};
if (actb_curr.value == ''){
actb_mouse_on_list = 0;
actb_removedisp();
return;
}
if (actb_self.actb_delimiter.length > 0){
caret_pos_start = getCaretStart(actb_curr);
caret_pos_end = getCaretEnd(actb_curr);
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();
}
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;
}
}
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);
actb_generate();
}
return this;
}
I've now inserted your improved script in the prototype at:
http://www.matheclipse.org
Maybe you have some other tips, how I can improve the usability
of the math interface? (i.e. layout/design of the buttons;
opening a help text with F1 on a function in the same page,...)
BTW: most of the functions in the prototype currently only work in numeric mode.