Сброс метода .off () - PullRequest
       1

Сброс метода .off ()

0 голосов
/ 13 января 2020

У меня была функция, которая снова сработала в функции. Поэтому я подумал, что использую .off(), чтобы предотвратить это, а затем в конце хочу снова восстановить прослушиватели событий. Но понятия не имею, как это будет работать. Вот мой код.

$('#modal_add_season_season_price').on('input keyup paste change', function() {
  $(this).off('input keyup paste change')
  console.log("1")
  $("#modal_add_season_price_warning").hide()
  var c = this.selectionStart,
    r = <?php echo $seperator=="," ? "/[^0-9,]/" : "/[^0-9.]/" ?>,
    v = $(this).val(),
    z = false;
  i = 0;
  while (r.test(v) && i < 10) {
    z = true;
    v = v.replace(r, '');
    c--;
    i++
  }
  if (z) {
    $("#modal_add_season_price_warning").show()
    $("#modal_add_season_price_warning").find('small').html("<i class=fas fa-exclamation-triangle'></i> Only numbers are allowed here. Decimal seperator is a <?php echo $seperator=="," ? "',' (comma)" : "'.' (dot)"; ?>")
    $(this).val(v)
  }
  this.setSelectionRange(c, c);
  if ($.isNumeric($(this).val()) && z == false) {
    console.log(z)
    $(".modal_add_season_season_price_valuta").addClass('is-valid')
    $(".modal_add_season_season_price_valuta").removeClass('is-invalid')
    $(this).addClass('is-valid')
    $(this).removeClass('is-invalid')
    $(".modal_add_season_season_price_span").addClass('is-valid')
    $(".modal_add_season_season_price_span").removeClass('is-invalid')
  }
  else {
    $(".modal_add_season_season_price_valuta").addClass('is-invalid')
    $(".modal_add_season_season_price_valuta").removeClass('is-valid')
    $(this).addClass('is-invalid')
    $(this).removeClass('is-valid')
    $(".modal_add_season_season_price_span").addClass('is-invalid')
    $(".modal_add_season_season_price_span").removeClass('is-valid')
  }
});

Итак, я заметил что-то странное, и с console.log я увидел, что он выстрелил дважды. Я добавил .off(), и теперь он выстрелил только один раз, как я хотел. Однако теперь у меня есть проблема, что он больше не слушает новые входы на этом входе. Я пытался погуглить, но безрезультатно. Может ли кто-нибудь помочь мне здесь?

1 Ответ

0 голосов
/ 15 января 2020

Используйте логическое значение для остановки повторений, вызванных изменением элемента:

var inside_price = false;
$(document.body).on('input keyup paste change', '#modal_add_season_season_price', function() {
    if(inside_price) return;
    inside_price = true;
    ...
    inside_price = false;
}        

Форма трех параметров on также запускает элементы, добавляемые динамически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...