Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
хмм, в свое время писал такое, но вроде код покомпактнее выходил (несколько десятков строк на jQuery, ибо много событий отслеживать нужно), да и iframe там ни к чему все можно через div'ы делать...
выходило как-то так:
/* function to add keyword drop-down lists */
var keyfunc = function(){
/* set autocomplete to off */
$(this).attr("autocomplete","off");
var id=$(this).attr("id"),idd="div"+id,arr=eval(id.substr(0,4)),c='';
/* show list of possible key words */
var showKeyWords = function(){
...
}
...
$(this).keydown(function(event){
var a=$(this).val(),e=event.keyCode;
if (a&&a.length>1&&e!=191&&e!=32&&e!=13) {
switch (e) {
case 40:
if (keyWordStarted) {
b=$("#"+idd+" a:eq("+(keyWordRem+1)+")");
$("#"+idd+" a").attr("class","");
/* select choosen key word */
if (b.attr("title")) {
b.attr("class","sel");
addKeyWord(id,arr[b.attr("rel")]);
keyWordRem++;
} else {
/* round-robin */
if (keyWordRem == keyWordTotal) {
keyWordRem=0;
b=$("#"+idd+" a:eq(0)");
b.attr("class","sel");
addKeyWord(id,arr[b.attr("rel")]);
} else {
/* restore key word */
$(this).val(keyWordStored);
keyWordRem++;
}
}
}
break;
case 38:
if (keyWordStarted) {
b=$("#"+idd+" a:eq("+(keyWordRem-1)+")");
$("#"+idd+" a").attr("class","");
/* select choosen key word */
if (b.attr("title")) {
b.attr("class","sel");
addKeyWord(id,arr[b.attr("rel")]);
keyWordRem--;
} else {
/* round-robin */
if (keyWordRem == -1) {
keyWordRem=keyWordTotal-1;
b=$("#"+idd+" a:eq("+keyWordRem+")");
b.attr("class","sel");
addKeyWord(id,arr[b.attr("rel")]);
} else {
/* restore key word */
$(this).val(keyWordStored);
keyWordRem--;
}
}
}
break;
case 8:
c=a.replace(/.*,\s/,"").replace(/.$/,"");
showKeyWords();
break;
}
} else {
$("#"+idd).hide();
keyWordRem=-1;
}
});
/* store key word */
$(this).keyup(function(event){
...
});
/* 'clean' key word, break arrows pressing for input string horizontal run */
$(this).keypress(function(event){
...
});
/* clean input */
$(this).focus(function(){
...
});
/* disable submit if user press 'enter' on auto-fill form */
$("#"+idd).parent().parent().parent().submit(function(){
...
});
};
...
/* keyword auto-fill logic */
$("input.keyword").each(keyfunc);
$("a.remkey").click(keyremfunc);
jQuery Autocomplete: автозаполнение