Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Выполнить функцию один раз (убрать обработчик) (https://javascript.ru/forum/misc/65385-vypolnit-funkciyu-odin-raz-ubrat-obrabotchik.html)

k_DizeL 15.10.2016 22:43

Выполнить функцию один раз (убрать обработчик)
 
Есть слайдер с ползунком.
$("#slider-range").slider({
      range: "min",
      min: 0,
      max: 5900,
      value: 0,
      slide: function( event, ui ) {
	      if(ui.value > 4600) {typeds();}
	      }
    });

При значении > 4600 выполняется функция typeds.
Как выполнить функцию typeds "единоразово" или открепить от нее обработчик.
Проблема в том, что функция typeds() выполняется каждый раз, как значение > 4600.

Vlasenko Fedor 15.10.2016 22:47

$("#slider-range").slider({
      range: "min",
      min: 0,
      max: 5900,
      value: 0,
      flag: true,
      slide: function( event, ui ) {
	      if($(this).slider('option', 'flag') && ui.value > 4600) {$(this).slider('option', 'flag', false); typeds();}
	      }
    });

поправил код

k_DizeL 15.10.2016 22:59

Poznakomlus, не работает

рони 15.10.2016 23:11

k_DizeL,
перенесите строку 6 в строку 0 var flag=true;

laimas 15.10.2016 23:13

Цитата:

Сообщение от рони
var falg=true

Случаем не flag?

рони 15.10.2016 23:24

laimas,
:) ок

Vlasenko Fedor 15.10.2016 23:24

Поправил код :)
или так
$("#slider-range").slider({
    range: "min",
    min: 0,
    max: 5900,
    value: 0,
    slide: function (event, ui) {
        var flag = this.flag || false;
        if (!flag && ui.value > 4600) {
            this.flag = true;
            typeds();
        }
    }
});

Aetae 16.10.2016 00:36

А правильней всего как-то так:
$("#slider-range").slider({
      range: "min",
      min: 0,
      max: 5900,
      value: 0,
      slide: function( event, ui ) {
          if(ui.value > 4600) {
              typeds();
              $(this).slider( "option", "slide", null );
          }
      }
});

k_DizeL 16.10.2016 00:55

Aetae, в таком случае перестает работать функция ползунка.Poznakomlus, да действительно с var заработало, спасибо.

Vlasenko Fedor 16.10.2016 00:56

если сделать еще так, то запретим дальнейшее изменение ползунков
$("#slider-range").slider({
      range: "min",
      min: 0,
      max: 5900,
      value: 0,
      slide: function( event, ui ) {
          if(ui.value > 4600) {
              $(this).slider( "option", "slide", function () {
                return false;
            });
            typeds();
          }
      }
});


Часовой пояс GMT +3, время: 05:21.