Jump to content
  • Sign Up
  • 0

Выполнить обработчик один раз


IvanRu08

Question

Друзья, всем привет. Стоит вроде тривиальная задача, но решить не могу. Есть форма поиска. Скрипт должен отследить когда пользователь начнет там что-то вводить. Сработать это должно только один раз. То есть при последующем изменении значения поля ничего делать не нужно. НО! Как только на форму поиска опять кликнули, события должно сработать еще один раз. И так далее.

Попробовал вот так вот, но срабатывает при каждом новом символе:

jQuery(function () {
    var search_flag = false;

    if (!search_flag) {

        $('.input_search').on('input', function () {
            
                        let elem = $(this).val();
            alert(elem);            

        });

        search_flag = true;

    }
});

Как сделать, чтобы срабатывало каждый раз, когда поле в фокусе - вообще ума не приложу. Товарищи, буду благодарен за любые мысли в этом направлении. 

Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
1 час назад, DivMan сказал:

В Алерт будет попадать текст, который находится в форме, при каждом вводе символа? 

Это я просто проверку сделал. Сейчас именно при каждом вводе символа алерт срабатывает. А нужно, чтобы срабатывал один раз. Причем когда форма теряет фокус и опять получается фокус - алерт должен сработать еще раз.

Link to post
Share on other sites
  • 0
let isFirstInputEvent = true;
let valueLength = 0;

const input = document.querySelector('input');

function callback(value) {
  console.log(value);
}

input.addEventListener('input', function() {
  let newValueLength = this.value.length;
  if (valueLength !== newValueLength && isFirstInputEvent) {
    callback('First input event');
    isFirstInputEvent = false;
  }
});

input.addEventListener('blur', function() {
  valueLength = this.value.length;
  isFirstInputEvent = true;
});

 

Link to post
Share on other sites
  • 0
if (!search_flag) {

должен быть внутри

$('.input_search').on('input', function () {

как вариант
можете сделать следующее:
при клике по форме каждому полю или только форме (если вам нужно для всей формы, а не для каждого поля в отдельности) выставляется класс к которому у вас будет привязано событие
при выполнении этого события на нужном поле делаете что вам нужно и удаляете этот класс.

проблема будет только в том, что при клике по следующему полю, для передачи фокуса например у вас скорее всего опять включится механизм, так что думаю вам нужно пересмотреть схему инициализации данной функции.
Я бы инициализировал данный механизм при загрузке страницы и нажатии кнопки отправки формы поиска, т.к. после этого по сути он будет производить новый поиск и как-бы в любом случае кликнет по форме.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy