сработавшая функция неожиданно & ldquo; не функция & rdquo; в то время как setInterval () выполняет другую функцию

(function () {
    var oldVal;

    $('#name').on('change textInput input', function () {
        var val = this.value;
        if (val !== oldVal) {
            oldVal = val;
            checkLength(val);
        }
    });
}());

Это приведет к улавливанию change, нажатия клавиш, paste, textInput, input (если доступно). И не стрелять больше, чем необходимо.

http://jsfiddle.net/katspaugh/xqeDj/


Ссылки:

textInput - тип события W3C DOM Level 3. http://www.w3.org/TR/DOM-Level-3-Events/#events-textevents

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

blockquote>

input - Тип события HTML5 .

Уволен в элементах управления, когда пользователь меняет значение

blockquote>

Firefox, Chrome, IE9 и другие современные браузеры.

Это событие происходит сразу после модификации, в отличие от события onchange, которое происходит, когда элемент теряет фокус.

blockquote>
0
задан citywatcher 18 January 2019 в 08:36
поделиться

2 ответа

function updatePlots() {
  // this way, the global plant function is not overwritten
  // @see JavaScript variable scope
  var plant;
  // You might want to 'var' your other local (?) variables, too
  // var fullplots, i, status, growth;
  fullplots = [];
  for (i = 0; i < plots.length; i++) { //get fullplots
    if (plots[i].length) {
      fullplots.push(i);
    }
  }

  for (i = 0; i < fullplots.length; i++) {
    // at this line of code you overwrite the global plant, which is not a function anymore then
    plant = plots[fullplots[i]][0];
    status = plots[fullplots[i]][1];
    growth = plots[fullplots[i]][2];

    if (growth < 100) { //increment
        plots[fullplots[i]][2]++;
    }
  }

  if (document.getElementById('plots').style.display == 'block') {
    getPlots();
  }
}
0
ответ дан yunzen 18 January 2019 в 08:36
поделиться

Проблема возникает в методе updatePlots, вызываемом setInterval. Здесь вы присваиваете «заводу» новое значение

plant = plots[fullplots[i]][0];

Затем, когда вызывается «растение», оно указывает на новое значение, назначенное вам в updatePlots, вместо функции, которую вы изначально имел. Вы должны объявить новую переменную в updatePlots, чтобы избежать изменения метода установки. Я бы использовал другое имя, чтобы избежать путаницы.

0
ответ дан tylermcwilliams 18 January 2019 в 08:36
поделиться
Другие вопросы по тегам:

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