Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выпадающий список, как сделать 
:(
    Опции темы
Alx
Дата 1.10.2004, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Цитата
Потребовать - явно не можешь!!!

GoodBoy , да ты чё, я ж пошутил!!!!! .......



--------------------
PM MAIL WWW ICQ   Вверх
GoodBoy
Дата 1.10.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



ALEXANDRO
А ты что мою фразу всерьёз воспринял??? wink.gif biggrin.gif biggrin.gif biggrin.gif


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Alx
Дата 1.10.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Цитата
А ты что мою фразу всерьёз воспринял???

уфф... да! .... smile.gif... smile.gifsmile.gif... biggrin.gif


так фсё, не флудим, а то накажут. меня-то точно. smile.gif wink.gif smile.gif


--------------------
PM MAIL WWW ICQ   Вверх
Гость_Андрей
Дата 1.10.2004, 16:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот теперь какая проблемма, если я из базы добавляю около 700 пунктов, то браузер виснет, неуспевает обновляться!
  Вверх
GoodBoy
Дата 1.10.2004, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Гость_Андрей Ещё бы!!!!!!!!!!!! :-)))))))))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Гость_Андрей
Дата 1.10.2004, 17:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(GoodBoy @ 1.10.2004, 16:54)
Гость_Андрей Ещё бы!!!!!!!!!!!! :-)))))))))))

А нельзя ускорить, используя не таблицы, а выпад. список???
  Вверх
Alx
Дата 1.10.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



тормозит не из-за этого, а из-за того, что он не успевает обработать все данные за одну секунду. на досуге придумаю (по крайней мере, постараюсь) решение.
Добавлено @ 17:55
то есть, за одну тысячную секунды.... гы.


--------------------
PM MAIL WWW ICQ   Вверх
Гость_Андрей
Дата 1.10.2004, 18:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(ALEXANDRO @ 1.10.2004, 17:54)
тормозит не из-за этого, а из-за того, что он не успевает обработать все данные за одну секунду. на досуге придумаю (по крайней мере, постараюсь) решение.
Добавлено @ 17:55
то есть, за одну тысячную секунды.... гы.

Плиззз, жду!
  Вверх
Alx
Дата 1.10.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



мне вот интересно... почему

не работает

Код
function checkFunc()
{for (var i=0; i<=words.cells.length-1; i++)
{if ((inp.value != "") && (inp.value != " "))
{words.cells[i].style.display='none';
}
}
for (var i=0; i<=words.cells.length-1; i++)
{if ((words.cells[i].innerText.indexOf(inp.value) == "0"))
{words.cells[i].style.display='block';
}
}
checkFunc();
}


памяти не хватает... а так - самое оно!


--------------------
PM MAIL WWW ICQ   Вверх
Sardar
Дата 2.10.2004, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



ALEXANDRO я тебе плюс поставил за "грамотный код"... ты знаешь, за такой код из комсомола исключать надо!!! biggrin.gif
Честно, прежде чем писать, думайте wink.gif
Мой вариант, убил 2 часа:
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<style type="text/css">
td.list_item {font-family:Verdana;font-size:10pt;color:white; background-color:#6699cc;}
td.list_item_sel {font-family:Verdana;font-size:10pt;color:white; background-color:#99ccff}
div.list_select {position:absolute;overflow:auto;height:65; background:#6699cc;}
</style>

<script language="Javascript" type="text/javascript">
<!--
createList.sel_list_info=[];
function createList(obj, arr) {
obj.onkeypress=list_input_keypress;
obj.onfocus=function() {
   var idt=this.getAttribute("list_select_name");
   if(!createList.sel_list_info[idt]) return;
   createList.sel_list_info[idt][1].style.visibility="visible";
};
obj.onblur=function() {
   var idt=this.getAttribute("list_select_name");
   if(!createList.sel_list_info[idt]) return;
   window.setTimeout("createList.sel_list_info["+idt+"][1].style.visibility=\"hidden\"", 100);
};
obj.setAttribute("list_select_name", createList.sel_list_info.length);
var x=0, y=obj.offsetHeight;
var wd=obj.offsetWidth;
var prt=obj;
while(prt) {
 x+=prt.offsetLeft;
 y+=prt.offsetTop;
 prt=prt.offsetParent;
}
var platf=document.createElement("DIV");
platf.className="list_select";
platf.style.width=wd;
platf.style.top=y;
platf.style.left=x;
platf.setAttribute("align", "center");

var table=document.createElement("TABLE");
table.setAttribute("width", "90%");
table.setAttribute("cellspacing", 0);
table.setAttribute("cellpadding", 0);

var row, cell;
 for(var i=0; i<arr.length; i++) {
   row=table.insertRow(table.rows.length);  
cell=row.insertCell(row.cells.length);
cell.appendChild(document.createTextNode(arr[i]));
   cell.onmouseover=row_mouse_over;
cell.onmouseout=row_mouse_out;
cell.onclick=row_click;
cell.className="list_item";
cell.setAttribute("list_select_name", createList.sel_list_info.length);
 }
createList.sel_list_info.push([arr,platf,table,obj]);
platf.appendChild(table);
document.body.appendChild(platf);
platf.style.visibility="hidden";
}

function row_mouse_out() {
this.className="list_item";
}
function row_mouse_over() {
this.className="list_item_sel";
}
function row_click() {
var idt=this.getAttribute("list_select_name");
if(!createList.sel_list_info[idt]) return;
createList.sel_list_info[idt][3].value=this.firstChild.nodeValue;
}
function list_input_keypress(ev) {
var kcd=(window.event? window.event.keyCode: ev.charCode);
var val=this.value+(kcd>=32? String.fromCharCode(kcd): "");
var idt=this.getAttribute("list_select_name");
if(!createList.sel_list_info[idt]) return;
var ind=bin_seek(val, createList.sel_list_info[idt][0], 0, createList.sel_list_info[idt][0].length-1);
if(ind<0) return;
createList.sel_list_info[idt][1].scrollTop=(createList.sel_list_info[idt][2].rows[0].offsetHeight+(document.all? 2: 0))*ind;
}

function bin_seek(word, arr, ind1, ind2) {
var mid;
while(ind1<ind2) {
 if((ind2-ind1+1)<7) return simple_seek(word, arr, ind1);
 mid=(ind2+ind1)>>1;
 if(arr[mid]<word) { ind1=mid+1; continue; }
 else if(arr[mid]>word) { ind2=mid-1; continue; }
 else return mid;
}
return -1;
}
function simple_seek(word, arr, offs) {
for(var i=offs; i<arr.length; i++) {
 if(arr[i]<word) continue;
 if(arr[i].length>=word.length&&arr[i].substr(0,word.length)==word) return i;
}
return -1;
}
//-->
</script>
</head>

<body>
<input type="text" id="list">
<script language="Javascript" type="text/javascript">
<!--
opt=["test", "privet", "vsem", "java", "script", "jad", "javable", "sdfs",  "saerdar", "vingrad", "vingrad", "vinsord", "verda"].sort();
createList(document.getElementById("list"), opt);
//-->
</script>
</body>
</html>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Alx
Дата 2.10.2004, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Sardar
он теперь во всех браузерах работает?

у меня, кстати, сам отбор не работает, т.е. я ввожу, что хочу, а в диве ничего не изменяется!
и ещё при прокрутке дива, он исчезает, mouseover'а нету! sad.gif
а, я понял - ты просто делаешь прокрутку в то место! Оригинально! biggrin.gif


--------------------
PM MAIL WWW ICQ   Вверх
Sardar
Дата 2.10.2004, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(ALEXANDRO @ 2.10.2004, 07:43)
он теперь во всех браузерах работает?

Да, иначе не пишу smile.gif
Цитата(ALEXANDRO @ 2.10.2004, 07:43)
и ещё при прокрутке дива, он исчезает, mouseover'а нету!

Вот здесь трабла, окошко появляется по событию focus и исчезает по blur в селекте. Пауза при скрытии стоит, дабы позволить другим событиям отработать прежде чем окошко исчезнет. Если этого не сделать, то при клике на слове в окошке, оно не вставится в текстовое поле. При прокрутке окошка мы теряем фокус с поля и у нас есть 100мс на выбор элемента biggrin.gif
Возможное решение: ловим клик на доументе, скрываем окошко; по blur ставим таймер на 5 сек, далее скрываем, по focus и mouseover в окошке оттягиваем скрытие еще на N времени. Думайте, решайте wink.gif

Обьясню коротко как все работает, вчера времени на это не было.
Создается фишка на существующем поле при вызове функцииcreateList. Аргументы: родительское_текстовое_поле, масив_слов_в_окошке. Можно создавать сколько угодно таких контролов для каждого текстового поля, вся инфа о них хранится в массиве createList.sel_list_info.
Весь смысл функции создать юзая DOM окошко(DIV.style.overflow="auto"), набить его данными и зарегистрировать обработчиков событий.

Обработчики row_mouse_out, row_mouse_over - вопросов вызывать не должны, отвечают за выделение строк в окошке. Их можно реализовать анонимными функциями(см. onfocus, onblur текстового поля).
row_click - вставляет текст из окошка в поле.

Обработчик list_input_keypress ловит событие keypress на текстовом поле и выполняет поиск подходящих значений. Используется бинарный поиск в отсортированном по возрастанию массиве, вспомним что в худшем случае число операций O(log2(arr.lngth)+7). В принципе можно реализовать префиксное дерево, но не думаю что в JS оно будет работать быстрее.

Видим что если чутьчуть подумать, то можно писать быстро работающие проги wink.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Гость_Андрей
Дата 3.10.2004, 18:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А твой скрипт с 1000 записей будет быстро работать??? И с сортировко проблемма, когда пишим там слово vsem вывод. все на V но при этом слово vsem ниже слова vingrad
  Вверх
Sardar
Дата 3.10.2004, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата
А твой скрипт с 1000 записей будет быстро работать???

Да, для этого он и писался. Бинарный поиск найдет значение за логарифмическое время.
Цитата
И с сортировко проблемма, когда пишим там слово vsem вывод. все на V но при этом слово vsem ниже слова vingrad

В алфовитном порядке слово vsem стоит дальше чем vingrad wink.gif
А внизу оно стоит, т.к. прокручивать дальше некуда smile.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.