Как сбросить функцию javascript ‘.one’ после выполнения кода?

#javascript #jquery

#javascript #jquery

Вопрос:

Я пытаюсь установить кнопку, которая позволяет избежать одновременного нажатия пользователем нескольких раз. Я пытался

Способ 1:

 $(document).one('click','.button',function(){
    //coding......
});
  

Способ 2:

 $(document).on('click','.button',function(){
    $(this).prop('disabled',true);
    //coding....
    $(this).prop('disabled',false);
});
  

В методе 1 возможно ли сбросить функцию ‘.one’?
Потому что я разрешаю пользователю щелкнуть еще раз, если часть ‘// coding’
возвращает false .
Или, может быть, есть другой вариант?

Комментарии:

1. Вам придется явно отключить обработчик (или свойство), если вы хотите только условно отключить его.

2. в чем проблема со вторым методом? //coding представлять означает, что такое вызов ajax или простой dom?

3. @prasanth ‘// coding’ содержит некоторую проверку ошибок и ajax

4. Для такого сценария я всегда рекомендую отказаться от функции

5. @hackape спасибо, я попробую это

Ответ №1:

Трудно сказать, не вдаваясь в подробности варианта использования. Этот фрагмент является лишь примером асинхронного действия (издевается с помощью setTimeout). Это просто переключает свойство disabled. Вы также можете добавлять / удалять прослушиватели событий, если это необходимо.

 const button1 = document.getElementById('button')

const onClick = e => {
  button1.disabled = true
  setTimeout(() => {
    const x = Math.round(Math.random())
    if (x) {
      button.disabled = false
    } else {
      const button2 = document.createElement('button')
      button2.textContent = 'Reset'
      button2.onclick = e => {
        button1.disabled = false
        button2.remove()
      }
      document.body.appendChild(button2)
    }
  }, 1000)
}

button1.addEventListener('click', onClick)  
 <button id='button'>Click</button>  

Ответ №2:

Вы должны проверить, отключена ли кнопка или нет. Если это не так, установите для нее значение отключено и выполните свой код.

 $(document).on('click','.button',function(){
    if ($(this).prop('disabled') === false) {
      $(this).prop('disabled',true);
         //put your code here
    }
});