Моя таблица времени js работает, но не тогда, когда я получаю начальное значение из поля ввода. Почему? - PullRequest
3 голосов
/ 27 апреля 2020

Этот js записывает таблицу времен для "var s", и она работает:

var s = 3
var i = s;
var d =10*s
for (; i <= d; ) {
document.write(i+ "<br>");
i+=s;}

Этот другой js должен делать то же самое, что и выше, но с использованием вставленного значения в поле ввода. Но он только записывает вставленное значение. Может ли кто-нибудь помочь мне понять, почему?

function getInputValue(){
var s = document.getElementById("myInput").value;
var i = s;
var d =10*s
for (; i <= d; ) {
document.write(i+ "<br>");
i+=s;}}

Спасибо!

https://code.sololearn.com/WNN550TTE0SE

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
    <input type="text" placeholder="insert number" id="myInput">
    <button type="button" onclick="getInputValue();">Let's go</button>
    <br><br>
    <script>
        /*this js writes the times table for var s, and it works*/
        var s = 3
        var i = s;
        var d =10*s
        for (; i <= d; ) {
        document.write(i+ "<br>");
        i+=s;}
        /* this js is supposed to do the same thing as above, but using the value inserted in the input box. But it only writes the inserted value. Why?
        function getInputValue(){
        var s = document.getElementById("myInput").value;
        var i = s;
        var d =10*s
        for (; i <= d; ) {
        document.write(i+ "<br>");
        i+=s;}}*/
    </script>
    </body>
</html>

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

Вы должны преобразовать входные данные в целое число:

getInputValue = () =>{
        var s = 3
        var s = parseInt(document.getElementById("myInput").value);
        var i = s;
        var d =10*s
        for (; i <= d; ) {
        document.write(i+ "<br>");
        i+=s;}

}
<html>
    <head>
    </head>
    <body>
    <input type="text" placeholder="insert number" id="myInput">
    <button type="button" onclick="getInputValue();">Let's go</button>
    <br><br>
    </body>
</html>

В качестве альтернативы:

getInputValue = () =>{
        var s = 3
        var s = document.getElementById("myInput").value *1;
        var i = s;
        var d =10*s
        for (; i <= d; ) {
        document.write(i+ "<br>");
        i+=s;}

}
<html>
    <head>
    </head>
    <body>
    <input type="text" placeholder="insert number" id="myInput">
    <button type="button" onclick="getInputValue();">Let's go</button>
    <br><br>
    </body>
</html>
1 голос
/ 27 апреля 2020

При получении ввода он возвращается в виде строки.

var s = document.getElementById("myInput").value; // value is returned as a string

Позже, когда оператор + используется для объединения (т. Е. Соединения) числа и строки, а не их добавления.

console.log(i) // 1
console.log(s) // "5" 
i+=s // this is the same as i = i + s
console.log(i) // "15"

Решение состоит в том, чтобы привести (т.е. преобразовать) строку в число:

var s = Number(document.getElementById("myInput").value);

В качестве примечания, это следующее выражение умножения работает, даже если s является строка, потому что если у вас есть число слева и умножение строки, это приведет строку к числу:

console.log(s) // "5"
var d = 10*s 
console.log(d) // 50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...