![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
DEER |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 2 Всего: 13 |
Народ, привет.
Не подскажете как можно начать выполнять функцию, после того как пользователь ввел какой то текст в input type=’text’ и если длина введенной строки > 3 символов? Под «после того как пользователь ввел какой то текст» я подразумеваю, что он сделал паузу в набирании > 1 секунды, например То есть как сдесь на форуме, вводишь название темы - страница джет какое то время, а потом ищет похожие темы Пробовал так
но результат не такой как я ожидал, да и this.value, как я понял, ещё не содержит введенного символа Это сообщение отредактировал(а) DEER - 25.7.2007, 11:31 -------------------- |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Все верно. Нужно использовать setТimeout
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Содержать-то оно его содержит, но вот достучаться до него не так-то просто: this доступен только в обработчике, но в вызываемую из него ф-цию его нужно явно передать (например, создав "замыкание"). И еще, имхо, таймер должен срабатывать лишь тогда, когда действительно целую секунду ничего не нажимали (иначе может выстроится очередь из кучи таймеров, мешающих друг другу). Пример:
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
SelenIT, вопрос задавал не я, но я ставлю плюс, потому что долго не мог найти как передавать инлайном параметры в лямда-функции
![]() |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
![]() |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Zeroglif, это даже неспортивно как-то...
![]() -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
AKS |
|
||||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Куда деваться - мы же с ним в "разных весовых категориях" ![]() А по-теме, кстати, вот что:
SelenIT, дополнительные параметры ведь уже давно поддерживают и FF, и Opera (любимая нежно ;) ). Причем эта "фича" уже не новая - точно не знаю, с какого времени, но у меня FF 0.8 (2004 г) "узнает это дело" (короче говоря, "фича" с тех времен, когда я не знал, что такое "хтмл" ;) ). Что я хочу сказать - удобно ведь очень! Передал this и делай в myFunc (где он будет первым аргументом) с этим this все, что хочешь! Чтобы это работало в IE, можно написать доп. расширение. На форуме Xpoint я писал, но оставили без комментариев. Попробую здесь, в здешней компании обсудить вот такое расширение для IE:
В результате - функция myFunc из аттрибута onkeyup:
отработает и в IE... Это сообщение отредактировал(а) AKS - 26.7.2007, 11:11 |
||||||
|
|||||||
DEER |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 749 Регистрация: 12.4.2005 Где: г. Рязань Репутация: 2 Всего: 13 |
Народ всем спасибо.
Я сам сделал, залез выложить а тут такое ) мой вариант
-------------------- |
||||
|
|||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
А предложенный мной вариант испытать не желаете? Давайте "рискнем"! ;) Получится как-нибудь так:
Только вместо id этого поля в функцию findCompanies будет передана ссылка непосредственно на это поле (не надо будет писать document.getElementById или типа того). И вспомогательных функций time_kdoun/time_kup не понадобится... |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif
1. Как быть со строкой первым аргументом? Думаю, что здесь может помочь знание синтаксиса - DOM:window.setTimeout/DOM:window.setInterval. 2. Как быть с синтаксисом setTimeout в IE, не страшно? "Волков бояться - в лес не ходить". ;) Я как-раз для этого и предложил взглянуть на windowXpander, чтобы разобраться и потом уже ничего не бояться. Очень надеюсь на Вас, в частности в случае с apply ("старая гвардия" должна знать, как обойтись без него - ведь как-то обходились до третьего издания, или до второго... когда он там появился). |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
То есть отказаться от использования строк вообще... или всё-таки проще доделать функцию? IE описал свой синтаксис, мы выходим за его рамки, остаётся только верить в лучшее... ![]() Не про меня. Собрать из массива будущие аргументы в строку, потом вызов через eval... если же предполагать, что число аргументов всё-таки имеет разумный предел (3-5), то проще проверять по switch-case длину массива и вперёд... |
|||
|
||||
AKS |
|
||||||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Нет, я себе это представил следующим образом. Раз известен синтаксис, который в случае со строкой в первом агрументе не предполагает использования экстра-параметров, то и нечего на них расчитывать. Т.е. все просто: хочешь строку - забудь про доп. параметры.
Ну мне показалось, что расширение довольно "безобидное", т.е. ничего вроде бы не "ломает".
Да неужели? ![]()
У меня сегодня чего-то "замкнуло" в этой, самой, как ее там называют - ее еще почесать можно... тьфу - в голове. ![]() Это сообщение отредактировал(а) AKS - 26.7.2007, 12:17 |
||||||||
|
|||||||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
||||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
AKS,
ОК... я могу легко снять брюзжание по поводу непредсказуемости IE, не могу сформулировать точно, поэтому снимаю. Если формулировать в стиле бла-бла-бла, то хостовые методы живут своей жизнью плюс у IE судя по всему оригинальная реализация глобального объекта (он как бы двоится), отсюда возможные сюрпризы при присваивании ссылки на эти методы переменным или их замене на что-то своё. Несмотря на это стоит заметить, что не вы один пытаетесь сэмулировать setTimeout, есть ещё один и ещё один... это хорошо, значит, они тоже тестировали и тоже пришли к позитивному выводу, это радует... ![]() |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Я не совсем понимаю зачем вы устроили споры по поводу дороговизны реализации setTimeout для веб-девелоперов всех стран, если есть кросбраузерный вариант, который уже давно подсказал SelenIT.
Это сообщение отредактировал(а) smartov - 26.7.2007, 14:08 |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
smartov,
создавать 2 дополнительных функции и делать 1 дополнительный вызов только ради того, чтобы удержать в руках ссылку на текущий объект - это ненормально. Можно, конечно, обойтись и 1-ой функцией, но это тоже будет слишком жирно для такой простой задачи. Отсюда движки, осознающие эту ненормальность, предлагают свои правильные нормальные решения и вводят дополнительные аргументы. Чтоб нам было удобно. AKS предлагает эмуляцию такого "правильного решения" для IE. Чтоб нам было удобно. Это никак не отменяет пользы замыканий (вариант SelenIT), это дорога в ту же сторону, никто не спорит, просто трём'c... |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Zeroglif, ааа... ясно
Просто как по мне ничего такого особенно в провозглашении анонимной функции и ее вызове нету. Любо явист вообще скажет что это в порядке вещей. |
|||
|
||||
AKS |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Ну-у-у, какое же это "брюзжание". Сейчас я Вас буду убеждать, что ничего подобного тут нет. Вот чего далеко ходить - испытал я "ихние" варианты, а они не работают со строкой в первом аргументе. А чья заслуга, что вариант из этой темы со строкой работает? Не буду показывать пальцем... ;)
Они, безусловно, молодцы - отличные практики. Очень-очень много полезного пишут. Но кроме того, что я уже отметил, они вот, между нами говоря, мои комменты не-е-е публикуют!!! Вчера по вашей ссылке написал Andrea, что он чего там попутал в своей $extend:
А Stev'y тоже писал, что null - 15 = -15 - это норма поведения (ECMAScript 9.3) - тоже не захотел публиковать критику. Но это я так, к слову - я на них ничуть не обижаюсь, т.к. у них тоже учусь. Спасибо им. Возвращаясь к эмуляции для IE нужно заметить, что подавляющее кол-во программ именно так и написаны программерами - НА НАШ СТРАХ И РИСК. Так что одной эмуляцией больше, одной меньше - ну подумаешь у кого-нибудь чего-нибудь "слетит с катушек"... ![]() |
||||
|
|||||
Zeroglif |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Согласен. Анонимная функция сама по себе может и в порядке вещей, но использовать её не из любви к искусству, а почём зря или вынужденно - это имхо беспорядок.
Это сообщение отредактировал(а) Zeroglif - 26.7.2007, 15:14 |
||||
|
|||||
AKS |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif, я написал вариант без apply. Сделал, кстати, еще и условие "пожестче":
Но ведь конструкция с eval помедленней получается! Вот тест:
Спрашиваю вашего мнения, т.к. именно Вы всегда отмечаете, что apply/call - это вещи, которые далеко не везде "известны". |
||||
|
|||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Не по своей воле. ![]() Тут по-поводу "жесткости" еще вопросы появляются. Вот так:
у меня ну ни-и-икак не хочет работать нативный setInterval/setTimeout (т.е. с допом). Вот если функция вместо строки, то работает. А если заменить на эмулированный, то хоть как работает. Так что же делать? Идти, как говорится, до конца и эмулировать поведение полностью. Хотя чего я тороплюсь - может это только у меня не работает... |
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
У меня тоже не работает. Равно как и игра с другими свойствами хоста, например, document.title+=2, что-то IE не нравится, или давай ему третьим аргументом язык, или упс... |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Еще раз спасибо! Ситуация проясняется. Все верно - по умолчанию 'jscript', а тут вдруг указал я ему черт знает что - конечно не будет работать, ведь строку на таком языке ( 1 ) он разобрать не может... P.S. Вы, наверно, миллионер (если исчислять в "спасибо")? ![]() |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Ну чтож, пока вот такая штуковина получилась - надеюсь, что больше никаких "аномалий" не выявится (главное - придумал имя крутое
![]()
Это сообщение отредактировал(а) AKS - 27.7.2007, 18:39 |
|||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Оригинально, но велосипед еще тот
![]() |
|||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
||||
|
||||
Diesel Draft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 876 Регистрация: 18.1.2005 Где: Lviv, Ukraine Репутация: -1 Всего: 5 |
settimeout();
|
|||
|
||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
AKS,
Если language пришёл третьим аргументом его бы надо пропустить в родной таймаут. Вместо !aFunc.apply лучше !Function.prototype.apply. Проверка на [native code] мне кажется лишней/непредсказуемой, может всё-таки обезопасить себя не переопределением родного/чужого setTimeout-а, а созданием своего (отдельно лежащего) метода (как у stchur-а) на свой объект. Строгое равенство при сравнении с typeof aFunc - масло масляное. Не хотите проверить на неравенство сo 'string', чем равенство с 'function' , у IE некоторые методы типа 'object', да и в разных браузерах может быть по разному. Где итерация и где return из func я бы записал всё в одну строку тернарным..., легче будет читать... Ещё, чуть не забыл, аргументы для eval лучше бы собрать в строку, !!!не стоит полагаться на массив. AKS, +1 Добавлено @ 11:42 Лучше SETtimeOUT(); ![]() Это сообщение отредактировал(а) Zeroglif - 27.7.2007, 12:04 |
|||
|
||||
AKS |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
О-о-о, спасибО!
Точно, так и надо! Сделаю! А вот это не понял - чем лучше? Т.е. где-нибудь может и по-другому выглядеть нативный body? Вот хотелось бы, конечно, не так, как у Стива. "Заманчивей" выглядит так, как сейчас, хотя если делать по-серьезному, типа безопасней ("по-взрослому"), то надо так, как Вы пишите. Сделаю "постным". ![]() Уже хочу - переделаю. Ну и я тогда также сделаю.
Ух, а что не так с массивом? P.S. Чуть позже отредактирую функцию там, где она уже есть (новых сообщений делать не буду). Это сообщение отредактировал(а) AKS - 27.7.2007, 12:13 |
||||
|
|||||
AKS |
|
||||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Zeroglif, надоело Вам тут уже в одной теме наверно, но я все же еще побеспокою, поскольку вопросец назрел серьезный.
Вы говорите "у IE некоторые методы типа 'object'", и вместо равенства с 'function' выбрать 'string'. А как же тогда быть, если кто-нибудь сунет что-то без [[Call]]? Поместить вызов в try/catch? P.S. А может на предмет "передана ли исполняемая процедура?" проверять как-нибудь по такому принципу:
? Да тут еще с этими 'object' выясняется, что проверка на !aFunc.apply просто необходима...
Как-то так, пока:
Это сообщение отредактировал(а) AKS - 27.7.2007, 13:29 |
||||||
|
|||||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Зачем? Пусть ошибки лезут. Не суй в другой раз. ![]() aFunc имеет полное право тащить на себе левое свойство apply, Function.prototype - тоже, но там скорее всего или не будет ничего вообще, или будет уже готовая эмуляция. toString может быть некачественно реализован или переопределён. |
|||
|
||||
AKS |
|
||||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Так, ясненько! Смотрите, как прикольно получается:
!!! ![]() Как же "присобачить" к возвратному значению ссылку на новое окно? В принципе, вернуть-то можно что угодно. ![]() ![]() Добавлено @ 13:47 Так, раз такое дело, то тогда так, наверно:
Это сообщение отредактировал(а) AKS - 27.7.2007, 13:48 |
||||
|
|||||
Zeroglif |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
||||
|
||||
AKS |
|
|||
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Ну и хорошо - ничего лишнего, здоровая умеренность во всем! ![]() Вот как же быть с проверкой [native code] - хочется ведь получить родной метод или прервать выполнение кода... Отредактировал функцию на 2-ой стр. (27.7.2007, 18:39). Это сообщение отредактировал(а) AKS - 27.7.2007, 18:44 |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |