Для цикла и innerHTML

Как заполнить текст абзацем с помощью innerHTML? Мне нужно ввести число в текстовое поле, а затем повторить какой-либо текст столько раз, сколько число, введенное в текстовое поле.

<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>ex10.js</title>
</head>
<body>
    <input type = "text" id = "input-type" onKeyUp = "myFunction()">
    <p id = "sample-text">Here is some text</p>
    <script>
        function myFunction() {
            let count = document.getElementById("input-type").value;
            document.getElementById("sample-text").innerHTML = count;

            if (isNaN(count)) {
                document.getElementById("sample-text").innerHTML = "Error. Not a number";
            }
            else {
                for(int i = 0; i < count; i++) {
                    document.getElementById("sample-text").innerHTML = "This is some text";
                }

            }
        }
    </script>
</body>
</html>
int i - это не JavaScript (никаких статических типов, никакого отношения к Java); вы имели в виду let i или var i?
Ry- 16.11.2018 06:34

мой плохой больше привык к C++ и java

Suck3rpunch 16.11.2018 06:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
128
3

Ответы 3

document.getElementById("sample-text").innerHTML = someVar;

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

Вместо этого вы захотите заранее создать свою строку, а затем один раз заполнить элемент. Как насчет создания массива, а затем создания строки с помощью join?

// create your empty array
var lines = [];

// loop x amount of times and add your text to the array
for (var i = 0; i < count; i++) {
    lines.push("This is some text");
}

// convert the array to a string, with each string on its own line
document.getElementById("sample-text").innerHTML = lines.join("\n");    

есть ли способ сделать это без использования массивов

Suck3rpunch 16.11.2018 06:55

Почему вы не хотите использовать массивы? Похоже, хороший вариант использования массива.

essmahr 16.11.2018 06:58

Однако, если вы настаиваете, вы можете построить строку с помощью var str = "", а затем str += "some text" в своем цикле.

essmahr 16.11.2018 07:00

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

Suck3rpunch 16.11.2018 07:01

Просто пытаюсь тебе помочь. Надеюсь, мои предложения указали вам в правильном направлении :)

essmahr 16.11.2018 07:11

абсолютно и я не хотел показаться неблагодарным, спасибо за помощь

Suck3rpunch 16.11.2018 07:24
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>ex10.js</title>
<script>
     function myFunction() {
        var count = document.getElementById("input-type").value;


        if (isNaN(count)) {
            document.getElementById("sample-text").innerHTML = "Error. Not a number";
        }
        else {
             // create your empty array
        var lines = "";

        // loop x amount of times and add your text to the array
        for (var i = 0; i < count; i++) {
            lines = lines+"Atmiya\n";
        }

        // convert the array to a string, with each string on its own line
        document.getElementById("sample-text").innerHTML = lines;
            }

        }
    </script>
</head>
<body>
    <input type = "number" id = "input-type" onKeyUp = "myFunction()">
    <p id = "sample-text">Here is some text</p>

</body>
</html>

Есть несколько уловок, чтобы упростить задачу:

<input type = "number">

<input> elements of type "number" are used to let the user enter a number. They include built-in validation to reject non-numerical entries. The browser may opt to provide stepper arrows to let the user increase and decrease the value using their mouse or by simply tapping with a fingertip.

Вы также можете использовать оператор += для объединения со свойством innerHTML элемента.

onchange, наверное, лучше использовать, чем onkeyup. Не уверен, что onkeyup работает с тачскрином. В поле ввода числа есть небольшие элементы управления для изменения значения.

function go() {
  let text = document.querySelector('#sample-text').innerHTML;
  let times = document.querySelector('#times').value;
  let output = document.querySelector('#output');
  let ix = 0;

  output.innerHTML = '';

  while (ix < times) {
    output.innerHTML += text;
    ix++;
  }
}
<input type = "number" min = "1" id = "times" onchange = "go()">
<p id = "sample-text">Here is some text</p>
<p id = "output"></p>

Другие вопросы по теме