Вопрос по таймера в JS

W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
Помогите написать код, который каждую секунду будет выводить надпись столько-то секунд прошло.

Вот код который я написал,скажите где ошибка:

var Id = setInterval(func(), 1000);
var counter;
func(){
counter++;
document.write(counter+"second passed");
}
 
Автор
Автор
W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
Не тот код написал, вот подправил , но все равно не получается чтоб надпись появлялась через секунду
var id = setInterval("myFunction()", 1000);
var counter = 0;

function myFunction(){
counter++;
document.write(counter+"second passed");
}
 
M

mr_coder

Новорег
Регистрация
5 Май 2019
Сообщения
14
Реакции
0
Баллы
20
потому что код всегда и везде выполняется сверху вниз, сначала надо объявить функцию, а только потом ее использовать или, в твоем случае, передавать ее в качестве аргумента. Более того setInterval() принимает первым парметром ссылку на функцию. а не строку. Далее, если ты передаешь функцию как аргумент другой функции то круглых скобок писать не нужно иначе ты передашь результат выполнения этой функции.

JavaScript:
//объявляем переменные глобально
var counter1=0;
var counter2=0;

//пример с анонимной функцией
setInterval(function(){
    counter1++;
    console.log('first counter:' + counter1);
}, 1000);

function second_counter(){
    counter2++;
    console.log('second counter:' + counter2);
}

//пример с передачей именованой функции
setInterval(second_counter, 1000);
JavaScript:
function main(){
    return "Результат выполнения main()"
}

function wow(x){
    console.log('Вы передали мне в качестве аргумента x:')
    console.log(x)
}

wow(main);
wow(main());
 
Последнее редактирование:
Автор
Автор
W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
потому что код всегда и везде выполняется сверху вниз, сначала надо объявить функцию, а только потом ее использовать или, в твоем случае, передавать ее в качестве аргумента. Более того setInterval() принимает первым парметром ссылку на функцию. а не строку. Далее, если ты передаешь функцию как аргумент другой функции то круглых скобок писать не нужно иначе ты передашь результат выполнения этой функции.

JavaScript:
//объявляем переменные глобально
var counter1=0;
var counter2=0;

//пример с анонимной функцией
setInterval(function(){
    counter1++;
    console.log('first counter:' + counter1);
}, 1000);

function second_counter(){
    counter2++;
    console.log('second counter:' + counter2);
}

//пример с передачей именованой функции
setInterval(second_counter, 1000);
JavaScript:
function main(){
    return "Результат выполнения main()"
}

function wow(x){
    console.log('Вы передали мне в качестве аргумента x:')
    console.log(x)
}

wow(main);
wow(main());




Спасибо, а если я заменю console.log на document.write будет результат выводиться не в консоль а на страницу?
 
S

SleepTT

Пользователь
Регистрация
27 Июл 2018
Сообщения
1
Реакции
8
Баллы
65
Спасибо, а если я заменю console.log на document.write будет результат выводиться не в консоль а на страницу?
Нет. Так как: "Метод document.write( str ) работает только пока HTML-страница находится в процессе загрузки. Он дописывает текст в текущее место HTML ещё до того, как браузер построит из него DOM."
Вам поможет:
Код:
<p>Елемент для вставки</p>
<script>
var count = 0;
/*
    # document.querySelector( ' TAGS or .CLASS_NAME or #ID ' )
    Возвращает первый элемент внутри документа (используется предупорядоченный обход узлов в 
    глубину до первого найденного узла), который совпадает с определенной группой селекторов.
*/
var elem = document.querySelector( 'p' );

function func()
{
    count++;
    /*
        # elem.textContent
        Позволяет задавать или получать текстовое содержимое элемента и его потомков.
    */
    elem.textContent = count + ' second passed';
}

setInterval( func, 1000 );
</script>
 
M

mr_coder

Новорег
Регистрация
5 Май 2019
Сообщения
14
Реакции
0
Баллы
20
Спасибо, а если я заменю console.log на document.write будет результат выводиться не в консоль а на страницу?
Неа. Вот пример создания узлов HTML документа.
HTML:
 <div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
var para = document.createElement("p");
var node = document.createTextNode("This is new.");
para.appendChild(node);

var element = document.getElementById("div1");
element.appendChild(para);
</script>
 
Автор
Автор
W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
Неа. Вот пример создания узлов HTML документа.
HTML:
 <div id="div1">
  <p id="p1">This is a paragraph.</p>
  <p id="p2">This is another paragraph.</p>
</div>

<script>
var para = document.createElement("p");
var node = document.createTextNode("This is new.");
para.appendChild(node);

var element = document.getElementById("div1");
element.appendChild(para);
</script>



Спасибо, но у меня вот какая просьба,я начинающий в js и можете объяснить что значит
element.appendChild()
createTextNode()
createElement()
И вообще что в коде прооисходит ,что за что отвечает

Если не трудно...
 
Автор
Автор
W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
Нет. Так как: "Метод document.write( str ) работает только пока HTML-страница находится в процессе загрузки. Он дописывает текст в текущее место HTML ещё до того, как браузер построит из него DOM."
Вам поможет:
Код:
<p>Елемент для вставки</p>
<script>
var count = 0;
/*
    # document.querySelector( ' TAGS or .CLASS_NAME or #ID ' )
    Возвращает первый элемент внутри документа (используется предупорядоченный обход узлов в
    глубину до первого найденного узла), который совпадает с определенной группой селекторов.
*/
var elem = document.querySelector( 'p' );

function func()
{
    count++;
    /*
        # elem.textContent
        Позволяет задавать или получать текстовое содержимое элемента и его потомков.
    */
    elem.textContent = count + ' second passed';
}

setInterval( func, 1000 );
</script>



Спасибо!
 
M

mr_coder

Новорег
Регистрация
5 Май 2019
Сообщения
14
Реакции
0
Баллы
20
element.appendChild() - добавляет дочерний элемент в родителя element
createTextNode() - создает текстовую ноду
createElement() - создает новый элемент

А вообще все это прекрасно гуглится.
 
Автор
Автор
W

Who

Пользователь
Регистрация
4 Ноя 2018
Сообщения
9
Реакции
1
Баллы
20
element.appendChild() - добавляет дочерний элемент в родителя element
createTextNode() - создает текстовую ноду
createElement() - создает новый элемент

А вообще все это прекрасно гуглится.


Спасибо