Как временно отключить обработчик щелчков в jQuery?

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

Для большего, более сложного проекта, переломный момент должен быть справедливо вначале; во многих случаях, прежде чем Вы даже начинаете кодировать. Для меньших проектов можно позволить себе ожидать прежде, чем решить реализовать шаблон.

Одна из лучших вещей можно сделать для увеличения способности распознать, когда шаблон должен использоваться, должен занять время после завершения проекта исследовать, как сложный "простой" подход стал. Если бы Вам потребовались бы меньше времени и усилия реализовать шаблон, или если шаблон разъяснил бы то, что Вы пытались сделать, можно зарегистрировать то знание далеко в следующий раз, когда Вы встречаетесь с подобной проблемой.

64
задан Mark Amery 10 July 2015 в 17:47
поделиться

3 ответа

$("#button_id").click(function() {
  if($(this).data('dont')==1) return;
  $(this).data('dont',1);
  //do something
  $(this).data('dont',0);
}

Помните, что $ .data () будет работать только для элементов с идентификатором.

10
ответ дан 24 November 2019 в 15:51
поделиться

Это более идиоматическая альтернатива искусственным решениям переменных состояния:

$("#button_id").one('click', DoSomething);

function DoSomething() {
  // do something.

  $("#button_id").one('click', DoSomething);
}

Один будет выполняться только один раз (до повторного подключения). Дополнительная информация здесь: http://docs.jquery.com/Events/one

37
ответ дан 24 November 2019 в 15:51
поделиться

Если #button_id подразумевает стандартную кнопку HTML (например, кнопку отправки), вы можете использовать атрибут 'disabled', чтобы сделать кнопку неактивной для браузера.

$("#button_id").click(function() {
    $('#button_id').attr('disabled', 'true');

    //do something

     $('#button_id').removeAttr('disabled');
});   

Однако вам может потребоваться соблюдать осторожность, так это порядок, в котором эти вещи могут происходить. Если вы используете команду jquery hide, вы можете включить "$ ('# button_id'). RemoveAttr ('disabled');" как часть обратного вызова, так что это не произойдет, пока скрытие не будет завершено.

[править] пример функции, использующей обратный вызов:

$("#button_id").click(function() {
    $('#button_id').attr('disabled', 'true');
    $('#myDiv').hide(function() { $('#button_id').removeAttr('disabled'); });
});   
3
ответ дан 24 November 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: