|
|
|
| Здравствуйте!
onkeyup="checkLogin(this.value);"
|
дергает функцию, как мне установить интервал, в период которого функцию не вызывается?
Заранее благодарю! | |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 14:30)
| | К примеру делаю такое:
function checkLogin1(LoginValue) {
setTimeout(function(){checkLogin(LoginValue)},350);
}
|
но как запретить дергать функцию, пока не прошли эти 350 мс?
соответственно:
onkeyup="checkLogin1(this.value);"
|
| |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 15:17)
| |
<script>
var TMR = null;
function checkLogin (x) { здесь нужный вам код }
</script>
<input onkeyup="if (!TMR) checkLogin (this.value), TMR = setTimeout ('clearTimeout (TMR), TMR = null', 350)">
|
| |
|
|
|
|
|
|
|
для: ЯСА
(11.03.2013 в 17:43)
| | Спасибо большое за помощь, все работает, не могли бы Вы объяснить как? | |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 18:08)
| | каждый запущенный метод setTimeout () возвращает свой идентификатор - целое положительное число (если одновременно запустить несколько таймеров, то идентификаторы их будут друг от друга отличаться; т.е. они уникальны)
этот идентификатор в коде используется в качестве флага (глобальная переменная TMR):
-- если флаг равен null, то по нажатию клавиши запускается функция проверки checkLogin (), после которой - пауза на период 350мс, в течение которого флаг (переменная TMR) не равен null, а равен какому-то положительному значению; по окончании паузы идентификатор очищается методом clearTimeout () и флаг обнуляется
-- соответственно, если флаг неравен null (в период паузы), то функция проверки checkLogin () по нажатию клавиши не запускается
в коде использованы запятые, а не точки с запятой, чтобы не плодить дополнительных фигурных скобок
при использовании точек с запятой код был бы таким:
<input onkeyup="if (!TMR) {checkLogin (this.value); TMR = setTimeout ('clearTimeout (TMR); TMR = null', 350)}">
//сравните с предложенным
<input onkeyup="if (!TMR) checkLogin (this.value), TMR = setTimeout ('clearTimeout (TMR), TMR = null', 350)">
|
| |
|
|
|
|
|
|
|
для: ЯСА
(11.03.2013 в 18:42)
| | Спасибо! | |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 18:51)
| | Если можно еще вопрос - при быстором вводе букв, они не все вводяться
если ввести
может быть
или
или
| |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 19:18)
| | Смотрите:
var TMR = null;
function checkLogin1(LoginValue) {
$('#text-type-1').html( LoginValue );
if (!TMR) {
$('#text-type-3').html( LoginValue );
checkLogin (LoginValue );
TMR = setTimeout ('clearTimeout (TMR), TMR = null', 350);
}else{
$('#text-type-4').html( LoginValue );
}
}
|
в эти id попадает весь текст text-type-1 и text-type-4 и непольный в вот этот: text-type-3 | |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 19:58)
| | мой код соответствовал вашему решению "приостановить вызов функции на определённый период"
очевидно, что вы неверно решаете вашу задачу
логичнее было бы, например, осуществить периодический (через таймер) опрос значения инпута при фокусе на нём и завершающую проверку при потере фокуса
приблизительно так:
<script>
var TxtFld, TMR, PreVal = '';
function checkLogin ()
{
if (TxtFld.value != PreVal)
{
PreVal = TxtFld.value;
// здесь помещаете нужный вам код, а пока вместо него - тестовый код для проверки исполнения
var d = new Date ();
document.getElementById ('inf').value += d.getMinutes () + ':'
+ d.getSeconds () + ':'
+ d.getMilliseconds () + ' -- |'
+ TxtFld.value + '|\n';
// конец тестового кода
}
if (self.TMR) clearTimeout (TMR);
if (!arguments.length) TMR = setTimeout (checkLogin, 350);
}
</script>
<input onfocus="TxtFld = this; checkLogin ()" onblur="checkLogin (1)">
<p><textarea id="inf" style="width: 100%; height: 400px"></textarea>
|
-------
правило использования мягкого знака очень простое
задаёте вопрос "что делать?" в соответствующем падеже, и, если в вопросе НЕТ мягкого знака, то и в глаголе его не будет
примеры:
1. вы написали: "они не все вводятЬся"
если бы задали вопрос "они не все что делаЮТ?", то увидели, что мягкого знака писать НЕ НАДО
вы ошиблись
2. я написал "идентификаторы их будут друг от друга отличатЬся"
потому что я спросил "идентификаторы их будут друг от друга что делаТЬ?", и увидел, что мягкий знак использовать НАДО
и не ошибся
:)
подробнее см. здесь | |
|
|
|
|
|
|
|
для: ЯСА
(11.03.2013 в 21:17)
| | Спасибо за ответ! Вы меня немного не поняли.
Точнее я неправильно сформулировал задачу:) соответственно переименную функции для большего понимания:)
при вводе букв дергается обработчик checkLogin() каждый раз:) я поэтому создал промежуточную функцию checkLoginWhithDelay(), в которой происходит задержка и суммирование запросов к функции checkLogin()
onkeyup="checkLoginWhithDelay(this.value)"
|
можно ли здесь
var TMR = null;
function checkLoginWhithDelay(LoginValue) {
if (!TMR) {
checkLogin (LoginValue );
TMR = setTimeout ('clearTimeout (TMR), TMR = null', 350);
}
}
|
т.е. задержку вызова checkLogin() сделать в другой функции?
Извините еще раз за неправильно сформулированный вопрос!
Грамматические ошибки - впредь постараюсь не делать:) | |
|
|
|
|
|
|
|
для: vadimka
(11.03.2013 в 22:00)
| | нашел решение в Интернете:
var tmr = null;
function checkLoginWhithDelay(LoginValue) {
if(tmr != null) {
clearTimeout(tmr);
}
tmr = setTimeout(function() {checkLogin(LoginValue)}, 500);
}
|
| |
|
|
|