Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: setTimeOut, как сделать ожидание при вводе текста для проверки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DlTA
Отправлено: 03 Февраля, 2022 - 18:12:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




мне нужно при вводе текста на сайте проверять у сервера текст
проверять текс могу НО сайт нужно не ложить и делать запрос чуть по медленнее в пол секунды или типа того

так вот
отправляю набор текста через JQuery:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('[name=text]').on('input propertychange paste', function(){
  3.  
  4.   // обрываем прошлый запрос
  5.   if(linkCheckRequest && linkCheckRequest.readyState != 4){
  6.     linkCheckRequest.abort();
  7.   }
  8.   // дальше отправка на сервер
  9.   linkCheckRequest = $.ajax({url:'мой_адрес', method:'post', data:{'text':text}, success:function(){/* обработка */}})
  10. });
  11.  


но как правильно сюда засунуть ожидание
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. if (qw){
  3.   clearTimeout(in)
  4. }
  5.  
  6. /* сюда */
  7. qw = setTimeout((text)=>{console.log(text)/*тут ничего не выводится*/}, 500);//
  8.  
 
 Top
DlTA
Отправлено: 03 Февраля, 2022 - 21:03:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




нашел ответ
передать параметры в setTimeout как параметр нельзя, но можно параметры сохранить в переменный которые будут учтены в функции в setTimeout
кромер this, для передачи this, а точнее $(this) лучше создать переменную подобие $this, и уже ее узать в коде
 
 Top
Vladimir Kheifets
Отправлено: 04 Февраля, 2022 - 06:40:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




DlTA пишет:
нашел ответ
передать параметры в setTimeout как параметр нельзя, но можно параметры сохранить в переменный которые будут учтены в функции в setTimeout
кромер this, для передачи this, а точнее $(this) лучше создать переменную подобие $this, и уже ее узать в коде


Добрый день!
Передать параметры нельзя, а про "this, а точнее $(this) ...лучше создать переменную подобие $this" как-то туманно.
Вы простосто должны определить переменную text, а в setTimeout д.б анонимная функция.
CODE (javascript):
скопировать код в буфер обмена
  1. <html>
  2. <script>
  3. text = "Hello, World!";
  4. qw = setTimeout(()=>{console.log(text)/*тут выводится Hello, World! */}, 500);
  5. </script>
  6. </html>
Удачи!
 
 Top
DlTA
Отправлено: 04 Февраля, 2022 - 10:54:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Vladimir Kheifets пишет:
qw = setTimeout(()=>{console.log(text)/*тут выводится Hello, World! */}, 500);

да, так и работает

Vladimir Kheifets пишет:
а про "this, а точнее $(this) ...лучше создать переменную подобие $this" как-то туманно.

зачем $this
при обработке формы
например:
CODE (html):
скопировать код в буфер обмена
  1. <form class="add">
  2.   <input name="text">
  3.   <button>Отправить</button>
  4. </form>

если форма одна то одинаково как ты к ней стучишся для поправки данных
а у меня поле [name=text] это будет ссылка, когда человек вводит значение я поправляю лишние символы и отправляю данные на сервер для проверки наличие такой ссылки

так вот если я хочу проверять данные, а еще не ложить сервер нагрузкой то как мне в
setTimeout сохранить переменную с тегом <input name="text">
наиболее простой вариант:

CODE (javascript):
скопировать код в буфер обмена
  1. $('.add [name=text]').on('...', function(){
  2.   $this=$(this);
  3.   ...
  4.   setTimeout(()=>{
  5.     $this->val()
  6.   }, 500);
  7. });


иначе когда у тебя несколько форм то ...((

(Отредактировано автором: 04 Февраля, 2022 - 11:05:23)

 
 Top
Vladimir Kheifets
Отправлено: 05 Февраля, 2022 - 06:25:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




DlTA пишет:
Vladimir Kheifets пишет:
qw = setTimeout(()=>{console.log(text)/*тут выводится Hello, World! */}, 500);

да, так и работает

Vladimir Kheifets пишет:
а про "this, а точнее $(this) ...лучше создать переменную подобие $this" как-то туманно.

зачем $this
при обработке формы
например:
CODE (html):
скопировать код в буфер обмена
  1. <form class="add">
  2.   <input name="text">
  3.   <button>Отправить</button>
  4. </form>

если форма одна то одинаково как ты к ней стучишся для поправки данных
а у меня поле [name=text] это будет ссылка, когда человек вводит значение я поправляю лишние символы и отправляю данные на сервер для проверки наличие такой ссылки

так вот если я хочу проверять данные, а еще не ложить сервер нагрузкой то как мне в
setTimeout сохранить переменную с тегом <input name="text">
наиболее простой вариант:

CODE (javascript):
скопировать код в буфер обмена
  1. $('.add [name=text]').on('...', function(){
  2.   $this=$(this);
  3.   ...
  4.   setTimeout(()=>{
  5.     $this->val()
  6.   }, 500);
  7. });


иначе когда у тебя несколько форм то ...((


Добрый день!
Можно обойтись и без this и $this=$(this);.
Чтобы было легко проверить написал на native JS.
Если только одна форма, и в ней тэг <input name="text">, то так:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <body>
  3. <form class="add">
  4.   <input name="text">
  5.   <button>Отправить</button>
  6. </form>
  7. </body>
  8. <script>
  9. elemetsTextNodelist = document.querySelectorAll(".add input[name='text']");
  10. elemetsTextNodelist[0].addEventListener('keyup', function(e){
  11.         console.log(e.target.value);
  12.         //  ...
  13.         setTimeout(()=>{console.log(e.target.value);}, 500);
  14. });
  15. </script>
  16. </html>
Если несколько форм и в каждой тэг <input name="text">, то так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <html>
  2. <body>
  3. <form class="add">
  4.   <input name="text">
  5.   <button>Отправить</button>
  6. </form>
  7. <form class="add">
  8.   <input name="text">
  9.   <button>Отправить</button>
  10. </form>
  11. <form class="add">
  12.   <input name="text">
  13.   <button>Отправить</button>
  14. </form>
  15. </body>
  16. <script>
  17. elemetsTextNodelist = document.querySelectorAll(".add input[name='text']");
  18. for(i=0; i<elemetsTextNodelist.length;i++)
  19. {
  20.         elemetsTextNodelist[i].addEventListener('keyup', function(e){
  21.                 console.log(e.target.value);
  22.                 //  ...
  23.                 setTimeout(()=>{console.log(e.target.value);}, 500);
  24.         });
  25. }
  26. </script>
Удачи!

(Отредактировано автором: 10 Февраля, 2022 - 11:01:30)

 
 Top
DlTA
Отправлено: 08 Февраля, 2022 - 22:04:13
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Vladimir Kheifets пишет:
elemetsTextNodelist[i].addEventListener('keyup', function(e){
                console.log(e.target.value);
                //  ...
                setTimeout(()=>{console.log(e.target.value);}, 500);
        });

а чем данное e отличается от моего текста с $this ? а ни чем))
 
 Top
Vladimir Kheifets
Отправлено: 10 Февраля, 2022 - 11:00:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




DlTA пишет:
Vladimir Kheifets пишет:
elemetsTextNodelist[i].addEventListener('keyup', function(e){
                console.log(e.target.value);
                //  ...
                setTimeout(()=>{console.log(e.target.value);}, 500);
        });

а чем данное e отличается от моего текста с $this ? а ни чем))


Добрый день!

Хороший вопрос.
Это Ваш код.
CODE (javascript):
скопировать код в буфер обмена
  1.     $('.add [name=text]').on('...', function(){
  2.       $this=$(this);
  3.       ...
  4.       setTimeout(()=>{
  5.         $this->val()
  6.       }, 500);
  7.     });


Вы определяете jQuery селектор $this=$(this); для того, чтобы в setTimeout применить jQuery метод val().
jQuery интерпретирует Ваш код в исполняемый native JS код.
CODE (javascript):
скопировать код в буфер обмена
  1. document.querySelectorAll(".add input[name='text']").addEventListener('keyup', function(){
  2.       $this=this;    
  3.       ...
  4.       setTimeout(()=>{
  5.        $this.value
  6.       }, 500);
  7.     });

Вариант с е отличается тем, что Вы не определяте ненужный селектор и не вызываете метод val() jQuery.
Между прочим jQuery тормозит выполнение кода по сравнению с native JS.
Вариант с е
CODE (javascript):
скопировать код в буфер обмена
  1.    $('.add [name=text]').on('...', function(e){  
  2.       ...
  3.       setTimeout(()=>{
  4.        e.target.value
  5.       }, 500);
  6.     });
Удачи!

(Отредактировано автором: 10 Февраля, 2022 - 11:26:22)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB