За последние 24 часа нас посетили 17485 программистов и 1720 роботов. Сейчас ищут 1528 программистов ...

Таймеры на странице

Тема в разделе "JavaScript и AJAX", создана пользователем elvisok2015, 1 дек 2015.

  1. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ну как минимум ты проигнорировал момент с
    Я не знаю, где у тебя кнопка стоит в коде страницы, но, быть может, ты на нее вешаешь обработчик до того, как она вообще объявляется в DOM. В чистом JS обработчики цепляют в самих элементах DOM, либо вешают инициализацию своих макарон на onload у body. У JQuey парадигма немного другая, и для ее реализации обязателен
    Код (Text):
    1. $(document).ready
    , который означает, что код внутри этой функции должен быть выполнен только после завершения сборки DOM-а.

    И да. А саму JQuery ты подключить не забыл?
    И что пишет тебе консоль отладочная?
     
  2. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    Код (Text):
    1. $(document).ready
    прописал, но результат не меняется. И, кстати, можно писать сокращенно:
    Код (Text):
    1. $(function(){
    кнопка там же, как и в примере выше, т.е. до обработчика JQuery.
    нет, библиотека подключена.
    молчит, как партизан ))
    А с этим вопросом разобраться не попробуешь?
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Эхехе... Внес правку всего в две строчки... Как и было сказано раньше - просто надо было знаки поменять.

    В коде комменты есть, где были правки. Теперь считает, сколько осталось до введенной даты. Вбей там что-то типа 1 jan 2016.
     
  4. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    Ок. Спасибо, вроде работает, но не могу врубиться полностью в скрипт, замудрено слишком.
    В функции start:
    Код (Text):
    1.  
    2. startFrom = +new Date() + stopwatchValue
    stopwatchValue - это что?
    Почему стоит знак "+" перед new Date() ?
    document.TestForm.stopwatch.value - здесь хранится дата из формы, верно?
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Знакомся, это JavaScript, как он есть. Самый упоротый из неэзотерических языков среди тех, что я когда-либо видел. На самом деле скрипт проще некуда. Просто, если с JS не приходилось работать, так сказать, по-взрослому, его очень трудно читать и осознавать причинно-следственные связи. Просто надо читать код на JS как JS, а не как PHP.
    текущее значение таймера. То, сколько он уже отсчитал в миллисекундах.
    Потому что "new Date()" вернет объект. Объекты нельзя складывать с числами. Но у объектов можно прописывать то, как они должны интерпретироваться в зависимости от контекста вызова. У всех встроенных классов в JS это реализовано. Ставя + перед new Date() я говорю, что мне нужен не объект Date, а его скалярная интерпретация, которую можно вставить в обычное арифметическое выражение, то есть просто количество миллисекунд, которое он хранит. Ты такие плюсики перед всем подряд будешь часто замечать в JS.
    Нет, это прямое обращение к форме. Внимательно приглядись - это же просто обращение к DOM. В документе обратиться к форме TestForm, внутри которой есть элемент stopwatch, у которого есть значение value.
     
  6. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    вот ты загнул! )))
    да уж, это точно не PHP )). До знакомства с JS, думал, что PHP более замороченный. Видать, ошибся )).
    ок, доходчиво, спс.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    PHP - простейший из языков, которые я когда-либо встречал.
    Миф, что JS - это простенький прикладной язык, на котором можно писать левой пяткой на коленке не более чем миф, распространяемый теми, кто это где-то слышал, но сам язык знать не знает.

    Вот тебе сравнение - чтобы начать кодить на PHP (разумеется, это не первый язык, с которым пришлось работать), мне понадобилось потратить меньше недели в расслабленном режиме. Разумеется, речь идет не о полных днях, а о паре-тройке часов по вечерам. Чтобы освоить JS, разумеется, на уровне, когда можно начать, не более того, я потратил 2 недели отпуска(полные дни) + еще 2 недели вечеров сверх того. И все это в режиме "хардкор". Чтобы просто начать на нем кодить более менее уверенно. Речь о каком-либо мастерстве даже не поднимается.

    Добавлено спустя 2 минуты 59 секунд:
    гугли "эзотерические языки программирования", поймешь о чем я.
     
  8. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    JQuery - проще, это усовершенствованный JS.
    Чтобы не выстраивать такие цепочки:
    Код (PHP):
    1. document.TestForm.stopwatch.value
    ..в JQuery просто обворачиваешь нужный элемент в доллар и делаешь, что нужно )
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    сильно сказано.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты вообще видел сколько лишнего кода выполняется в функции "бакс"?
     
  11. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    В JS его меньше? Бакс обворачивает нужный элемент напрямую, без прелюдий, почти во всех случаях.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ого. ну лол чо. выборка по гетЭлементБайЧТОНИБУДЬ в разы быстрее бакса потому что бакс выбирает всё дерево (даже произведение всего дерева) и далее его отфильтровывает по переданному условию. это не может быть быстрее выбора по "чо-нибудь".
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Не спорь о том, что не до конца понимаешь с тем, кто понимает. Лучше, в таком случае, прислушаться.

    Сейчас полным полно горе-программистов, которые пытаются кодить, не понимая, как работает машина, с которой они пытаются договориться. Не зная о том, какое представление в памяти имеют данные, что они в нее пихают, как работают вызовы функций, что такое скоупы и стеки и тд. Это ужасно и грустно. Они, порой, люто насилуют комп из-за этого не знания, городя города, которые можно сделать иначе и проще.

    JQuery - хорошая либа. Но она породила новое явление - горе-программистов, которые пользуются библиотекой для языка, не зная как работает сам язык и, опционально, не понимая, как работает машина, с которой они пытаются договориться. И это - стыд и позор.

    Никто не говорит, что не надо пользоваться JQuery, я сам пользуюсь ей, мне безумно нравится, как там реализован AJAX, например. Хотя я и подумываю запилить собственную реализацию AJAX на схожий манер, а то заметил, что кроме AJAX-а, ничем пока в ней и не пользуюсь, а это крайне неэффективное использование такой жирной кобылы, но не суть.

    Программист - это инженер. Говорить, что JS не нужен, потому что есть JQuery, это все равно что говорить, мол C++ не нужен, потому что есть QT. Или что дому фундамент не нужен, потому что есть крыша. Нельзя гордиться невежеством.
     
  14. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    Ну раз ты такой продвинутый, то может сможешь разобраться по существу моего вопроса? А именно:
    обработчик события срабатывает, если убрать тэги:
    Код (PHP):
    1. <form></form>
    2.  
    Если тэги оставить, то обработчик не срабатывает, как нужно, консоль при этом молчит:
    пример1 - тут работает
    пример2 - тут обработчик выдает результат, но кратковременно.
    Нужно, чтобы на кнопке после клика появлялась новая надпись и не пропадала.
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в какой-то момент я тоже заметил что кроме аякса ничем особо и не пользуюсь. тогда написал собственный коротенький класс для аякса, увесистый селектор заменил на тонну функций getElementBy*. приложение стало работать быстрее раз в 40. вот только кодить приходится много и страшно. но мне как-то производительность приложения показалась важнее производительности программиста.
     
  16. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    согласен
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот тут как нельзя кстати приходятся слова суриката про программистов, которые используют крутые либы, но не понимают как работают основы - не важно с этими либами или без них. просто не понимают.

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

    решение твоей проблемы - не использовать форму если она там реально не нужна, либо повесить заглушку на событие отправки формы.
    ну и основы изучить да.
     
  18. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    Значит нужна заглушка. Форма нужна для связи с базой данных, откуда будет браться время для таймера. Сам таймер хочу отображать в кнопке после клика. Спасибо.
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Вот тебе подсказка - можно переопределить обработчик формы, чтобы, вместо отправки, он вызывала твою JS-функцию. А оттуда уже делай что хочешь с этими данными. Хоть в аяксы их упаковывай, хоть прокидывай дальше до сервера в нормальном режиме, формируя post.
     
  20. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    привет, посмотри, плиз, этот простой примерчик. Там при нажатии на кнопку должна добавляться в таблицу новая строка со столбцом, где я хочу выводить время. Изначально под кнопкой уже есть одна ячейка с цифрой 1. Но после нажатия на кнопку новая ячейка не добавляется, а заменяется уже существующая. Как добавить новую ячейку (а не заменить), при этом обязательно в ней должно быть время. Т.е. кликнул на кнопку - получил ячейку с временем, кликнул еще раз - плюс еще ячейка и т.д.
     
  21. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Вот есть у тебя:
    Код (PHP):
    1. var rez = $('.tab').append(st);
    2. var now = new Date();
    3. $(rez).html(now);
    4.  
    Построчно:
    1) Вернуть в переменную rez элемент DOM класса .tab, к которому был добавлен элемент st;
    2) Присвоить переменной now текущую дату;
    3) Заменить содержимое элемента DOM класса .tab на содержимое переменной now;

    Там не заменяется существующая. Там вообще все содержимое таблицы стирается, и вместо него ставится now. Отлаживай код, глядя не на страничку, а в код страницы + отладчик JS на стороне браузера. И не пиши ты на JQuery. Научись сначала на JS. Ты вот в курсе, что такое замыкания? Как сохранять локальные переменные в их контексте? Нет? А ты этим пользуешься в своем коде, между прочим. JQuery не освобождает тебя от таких вещей. Сначала изучи язык, потом библиотеку.
     
  22. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    Точно! Спс за подсказку.
    Исправил.
    :)
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Нет, не исправил. У тебя при клике на кнопку, конечно, добавляется новая строка, этого не отнять.
    НО, при этом значения во всех строках выставляются одинаковые.

    Потому что:

    $('.tab tr').html(now); == "во все теги tr внутри элемента с классом .tab замени содержимое на now";

    Добавлено спустя 5 минут 49 секунд:
    Попробуй так.
    Код (PHP):
    1. $(document).ready(function () {
    2. $("form").submit(function(){
    3.   $('.tab').append('<tr><td>'+new Date()+'</td></tr>');
    4.     return false;
    5.  });    
    6. });
    Но ты так и будешь страдать от каждой подобной мелочи, просто не зная, что можно делать в JS, а что нельзя. ТЫ же сейчас кодишь вслепую. Не понимая того, что делаешь. Это очень неправильно.

    Добавлено спустя 49 секунд:
    Как минимум, у меня к тебе вопрос - а на кой черт ты вообще используешь submit там? Почему не использовать обычную кнопку и событие onclick от нее? Так же правильнее.
     
  24. elvisok2015

    elvisok2015 Новичок

    С нами с:
    17 окт 2015
    Сообщения:
    37
    Симпатии:
    0
    нужна форма для отправки данных в БД. Из БД хочу брать значение времени для таймера. Таймер планирую выводить в ячейке таблицы. Т.е. на кликнул на баттон, данные ушли на сервер, оттуда пришел ответ и запустился нужный таймер в подгруженной ячейке.
    Правда, еще не знаю, как в дальнейшем буду реализовывать вывод этих таймеров в подгруженные ячейки таблицы, ведь в исходном коде этих подгруженных ячеек нет. Например, пользователь зашел на страницу, запустил таймер на несколько часов, затем вышел из интернета, и если опять зайдет на эту страницу, то таймеры загрузятся из БД в подгруженные ячейки таблицы.

    Добавлено спустя 2 минуты 9 секунд:
    учебники по JS и jquery читаю, но читать - мало. Нужно кодить понемногу, набивать шишки, без практики очень быстро забывается все, что прочитал в книжках. Мое мнение такое ))
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Вот, читай и кодь.
    Мне этого хватило, чтобы потом сесть и написать собственный спрайтовый 2Д-движок для HTML5-Canvas с поддержкой многослойного рендеринга, анимации и прочей веселухи. Учебник крайне годный. Очень.