JavaScript, setTimeout

1

Мне нужно создать текстовую форму типа ввода на моей веб-странице, чтобы изменить значение setTimeout на основе ввода пользователем в моем javascript-коде при его запуске. Могу ли я сделать это, и если я смогу, как я могу?

Я устал посылать String для моего бэкэнда из пользовательского ввода, и чем с вызовами ajax назначить String переменной в javascript, но она не работает из-за того, что внутренний html является строкой, и когда я преобразовал ее в int, это не работа тоже.

function getData() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       document.getElementById("idovalt").innerHTML =
       this.responseText;
    }
  };
  xhttp.open("GET", "toltes", true);
  xhttp.send();
}

Вот форма ввода:

var idovalt= 1000;

setTimeout(function(){ize()}, idovalt);

  • 4
    И вопрос в том, почему именно помечены как c++ ?
  • 0
    Почему этот вопрос даже проголосовал? Название не имеет смысла; вопрос включает в себя много грамматических ошибок; непонятно ... На первый взгляд это кажется простым вопросом (тайм-аут, обработка событий очень проста), но когда я начинаю его читать, я понимаю, что вопрос не ясен. Я игнорирую подобные вопросы, когда вижу их ... Мои два цента.
Теги:

2 ответа

0
Лучший ответ

Строка или целое не имеет отношения к делу.

HTML:

<input type="text" id="idovalt" value="1000">

JS:

function ize() {
  // do something
}

setTimeout(ize, document.getElementById('idovalt').value);

Если вы хотите написать код прямо к первому аргументу setTimeout(), код должен быть указан.

например,

setTimeout('alert("Hello!")', 1000);
  • 0
    If you want to write some code directly to the first argument of setTimeout(), the code should be quoted. это очень плохая идея, так как код передается через eval . По крайней мере, это затрудняет анализ кода и, как таковое, затрудняет рефакторинг. Это также может затруднить работу других инструментов, работающих с исходным кодом. Лучше просто сделать функцию на месте как обратный вызов setTimeout(() => alert("Hello!"), 1000); теперь, например, если в ESLint установлено правило no-alert , оно будет запущено.
  • 0
    Конечно, я знаю это и не собираюсь рекомендовать этот способ. Исходный опубликованный код был написан в этом стиле, но синтаксис был неправильным. Я просто указал на это.
0

Да, может подойти к этому, я собираюсь использовать JQuery для обработки событий, но, конечно, может его изменить.

var myInput = $("#timeoutDelay"),
    timeOut = null;


function setTimeOutOnInputChange(timeout) {
    timeOut = setTimeout(function () {
        console.log("Your code...");
        //Ize();
    }, timeout);
}

// I did not get why you are doing this, asynchronous call execute after the timeout function, thats why you need to wait until is ready to change de timeout, in case time out value comes from server and not for user input, otherwise it doesn't makes sense.
function getData() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       document.getElementById("idovalt").innerHTML = this.responseText;
       setTimeOutOnInputChange(parseInt(this.responseText)); // Assuming does not return an object
    }
  };
  xhttp.open("GET", "toltes", true);
  xhttp.send();
} 


myInput.change(function () {
    var val = this.value;
    if (timeOut != null) {
        clearTimeout(timeOut);
    }

    if (isNaN(val)) {
        console.error("Input is not a number");
    } else {
        setTimeOutOnInputChange(val);
    }    
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню