Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.01.2016, 21:50
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

по клину на кнопке Вы запускаете функцию main, это вроде понятно. Я просто не пойму, где происходит вызов st(). Ведь внутри main она не вызывается, только определяется.
Ответить с цитированием
  #12 (permalink)  
Старый 04.01.2016, 21:53
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

моя логика была такая: вот эти строки
var tmr;
    function stopMove ()    { clearInterval(tmr); }
    function startMove ()   { tmr = setInterval(moveBtn, 24); }

не определять в глобальном контексте, а сделать это внутри функции (в данном случае main), которая запуститься как только броузер построит ДОМ ))
Ответить с цитированием
  #13 (permalink)  
Старый 04.01.2016, 21:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Keramet
по клину на кнопке Вы запускаете функцию main
нет - запускается не main а st -- в обоих вариантах
Ответить с цитированием
  #14 (permalink)  
Старый 04.01.2016, 21:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Keramet
которая запуститься как только броузер построит ДОМ
тогда main()() вместо $("#btn").on({click : main()})
Ответить с цитированием
  #15 (permalink)  
Старый 04.01.2016, 21:56
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от рони Посмотреть сообщение
нет - запускается не main а st -- в обоих вариантах
Если Вам не сложно, можете указать, в какой строке Вашего кода происходит вызов st()?
Ответить с цитированием
  #16 (permalink)  
Старый 04.01.2016, 22:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Keramet
Если Вам не сложно, можете указать, в какой строке Вашего кода происходит вызов st()?
когда вы кликаите по кнопке $("#btn").on({click : main()}) -- main() в этой строке превратилось в st !!!
смотрите ранее что возвращает main => return st;
Ответить с цитированием
  #17 (permalink)  
Старый 04.01.2016, 22:04
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

рони,
а, теперь вроде догоняю))
Ответить с цитированием
  #18 (permalink)  
Старый 04.01.2016, 22:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Keramet,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
  var main = function () {

	var tmr;
	function stop()	    { clearInterval(tmr); }
	function st()	{ tmr = setInterval(moveBtn, 24); }

	var moveBtn = function () {
		var btn = $("#btn");
		var left = parseInt( btn.css("margin-Left") ) + 1;
		btn.css("margin-Left", left + "px");
	};
    st()
	return st;
};
$(main);


  </script>
</head>

<body>
<input type='button' id="btn"  value="click">




</body>

</html>
Ответить с цитированием
  #19 (permalink)  
Старый 04.01.2016, 23:06
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
не определять в глобальном контексте, а сделать это внутри функции (в данном случае main), которая запуститься как только броузер построит ДОМ ))
Зачем?
Если определить функции внутри другой функции, то они только в ней видны и будут. Обработчики событий на элементах выполняются в глобальной контексте, и, соответственно, ни о каких stopMove и startMove они знать в принципе не могут.

Так что либо навешивай обработчик программно внутри функции main:
var main = function() {
    "use strict";
    var tmr;
    function stopMove ()    { clearInterval(tmr); }
    function startMove ()   { tmr = setInterval(moveBtn, 24); }
     
    function moveBtn() { //Объявляй уж в одном стиле
        var btn = $("#btn");
        var left = parseInt( btn.css("margin-Left") ) + 1;
        btn.css("margin-Left", left + "px");
    };
    
    $("#btn").on("click", startMove);
};
$(document).ready(main);


Либо объявляй функции глобально.

Последний раз редактировалось Erolast, 04.01.2016 в 23:08.
Ответить с цитированием
  #20 (permalink)  
Старый 04.01.2016, 23:59
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от Erolast Посмотреть сообщение
Зачем?
в качестве эксперимента (идёт мой процесс обучения )

Сообщение от Erolast Посмотреть сообщение
Зачем?
Если определить функции внутри другой функции, то они только в ней видны и будут.
я это понял. Хотел узнать, смогут ли в этом случае помочь замыкания

Сообщение от Erolast Посмотреть сообщение
Обработчики событий на элементах выполняются в глобальной контексте, и, соответственно, ни о каких stopMove и startMove они знать в принципе не могут.
я думал, что вызвав функцию main и вернув из неё обработчик, он (обработчик) будет доступен (благодаря замыканию).

Сообщение от Erolast Посмотреть сообщение
function moveBtn() { //Объявляй уж в одном стиле
а что не так я сделал?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли передать переменую grid из одной функции в другую alexrzl ExtJS 1 16.11.2010 18:33
arguments вызвавшей функции mister_maxim Общие вопросы Javascript 4 12.10.2010 16:21
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Можно ли использовать функции в качестве свойства абс_позиционируемого объекта Newgen Элементы интерфейса 1 27.07.2009 14:40
Замыкание - это... Zeroglif Общие вопросы Javascript 11 06.03.2009 22:04