MILL-R_TiME90 Ответов: 1

Я пытаюсь изменить значение ввода с помощью функции


У меня есть этот HTML:

<input id="_out"
       type="text"
       value="Time: (s)"
       disabled
/>


Как указано в вопросе с функцией ТАЙМЕР- Я пытаюсь изменить ситуацию. ценность от #_из
от "Время: (ы)" к "Время: 60S" =&ГТ; ". . .59с" =&ГТ; ". . .58s" =&ГТ; и так далее, а затем сбросить на 0

JS:

let _out = document.querySelector("#_out");
let time_init = 60;

const TIMER = (out, init) => {

  out.value = /\(s\)/.test(out.value) ?
  out.value.replace("(s)", init + "s") :
  out.value.replace(/\d+/, init--);

  if(init == -1) { init = 60; }

};

TIMER(_out, time_init); // _out.value returns "Time: 60s"
TIMER(_out, time_init); /* _out.value returns "Time: 60s"
                           this and each time subsequently */


Что я уже пробовал:

Я пробовал бежать ТАЙМЕРс вложенной стопкой заявлений индивидуально невложенным в то время как есть прямые ссылки _из и time_init и это, кажется, решает проблему.

Поправьте меня, если я ошибаюсь, но, похоже, это семантическая проблема, заключающаяся в том, что в этом при инициализации из списка arg он инициализируется следующим образом: 60 до начала -- однако оператор применяется к нему, когда он должен уменьшаться, в этом декременты в частности а не time_init несмотря на то, что он был передан в качестве 2-го аргумента.

1 Ответов

Рейтинг:
6

Richard Deeming

Параметры Javascript всегда передаются по значению. Любые изменения, которые вы вносите в init параметр в TIMER функция будет нет быть отраженным в time_init переменная.

Попробуйте вместо этого передать объект.

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

const settings = {
    out: document.querySelector("#_out"),
    init: 60
};

const TIMER = (settings) => {
    settings.out.value = /\(s\)/.test(settings.out.value) 
        ? settings.out.value.replace("(s)", settings.init + "s") 
        : settings.out.value.replace(/\d+/, settings.init);
    
    settings.init = settings.init === 0 ? 60 : settings.init - 1;
};
Демонстрация[^]