Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сделать таймер (https://javascript.ru/forum/events/45614-kak-sdelat-tajjmer.html)

ruslite 08.03.2014 09:13

Как сделать таймер
 
привет. Есть код
var nameVal = $( "#nameInput" ).val();
	var msg = $( "#messageInput" ).val();
	var canalVal = $( "#canalInput" ).val();
	if((nameVal) && (msg)){
	socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
	};


Мне надо, чтобы эта строчка
socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
выполнялась не чаще 3000мс. Как сделать? Спасибо

kotamirov 08.03.2014 10:15

setInterval(function(){message();} , 3000);
var message = function(){
var nameVal = $( "#nameInput" ).val();
    var msg = $( "#messageInput" ).val();
    var canalVal = $( "#canalInput" ).val();
    if((nameVal) && (msg)){
    socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
    };
};

setInterval - repeated eatch 3000ms))
можно так попробовать.

рони 08.03.2014 10:36

ruslite,
var nameVal = $("#nameInput").val();
  var msg = $("#messageInput").val();
  var canalVal = $("#canalInput").val();
  flag = true;
  if (nameVal && msg && flag) {
      flag = false;
      window.setTimeout(function () {
          flag = true
      }, 3000)
      socket.emit('message', {
          name: nameVal,
          message: msg,
          canal: canalVal
      })
  };

ruslite 08.03.2014 10:38

Цитата:

Сообщение от kotamirov (Сообщение 301686)
setInterval(function(){message();} , 3000);
var message = function(){
var nameVal = $( "#nameInput" ).val();
    var msg = $( "#messageInput" ).val();
    var canalVal = $( "#canalInput" ).val();
    if((nameVal) && (msg)){
    socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
    };
};

setInterval - repeated eatch 3000ms))
можно так попробовать.

заменил свой код на ваш и перекидывает на основную страницу сайта. значит где-ошибка у вас.

ruslite 08.03.2014 10:42

Цитата:

Сообщение от рони (Сообщение 301687)
ruslite,
var nameVal = $("#nameInput").val();
  var msg = $("#messageInput").val();
  var canalVal = $("#canalInput").val();
  flag = true;
  if (nameVal && msg && flag) {
      flag = false;
      window.setTimeout(function () {
          flag = true
      }, 3000)
      socket.emit('message', {
          name: nameVal,
          message: msg,
          canal: canalVal
      })
  };

не срабатывает. вот весь код, может я не так думаю
var socket = io.connect( 'http://localhost:8080' );
$( "#messageForm" ).submit( function() {
	var nameVal = $( "#nameInput" ).val();
	var msg = $( "#messageInput" ).val();
	var canalVal = $( "#canalInput" ).val();
	
	if(nameVal && msg){
	socket.emit( 'message', { name: nameVal, message: msg, canal: canalVal } )
	};
	// Ajax call for saving datas
	$.ajax({
		url: "./ajax/insertNewMessage.php",
		type: "POST",
		data: { name: nameVal, message: msg, canal: canalVal },
		success: function(data) {
			 
		}
		
	});
	
	return false;
});


socket.on( 'message', function( data ) {
	var actualContent = $( "#messages" ).html();
	var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message
																					.replace(new RegExp("&#D83DDE04",'gi'),"<img src='../packs/basic/D83DDE04.png' height='21' width='21'>")
																					
																					.replace(new RegExp("&#D83DDC8A",'gi'),"<img src='../packs/basic/D83DDC8A.png' height='21' width='21'>") + '</li>';
	var content = newMsgContent + actualContent;
	$( "#messages" ).html( content );
	
});

рони 08.03.2014 10:49

ruslite,
и где в вашем коде то что я добавил?

ruslite 08.03.2014 10:52

Цитата:

Сообщение от рони (Сообщение 301691)
ruslite,
и где в вашем коде то что я добавил?

это я в изначальном виде скинул. вот с вашим
var socket = io.connect( 'http://localhost:8080' );
$( "#messageForm" ).submit( function() {
	var nameVal = $("#nameInput").val();
    msg = $("#messageInput").val();
    var canalVal = $("#canalInput").val();
    flag = true;
    if (nameVal && msg && flag) {
		  flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000)
		  socket.emit('message', {
			  name: nameVal,
			  message: msg,
			  canal: canalVal
		  })
    };
	
	// Ajax call for saving datas
	$.ajax({
		url: "./ajax/insertNewMessage.php",
		type: "POST",
		data: { name: nameVal, message: msg, canal: canalVal },
		success: function(data) {
			 
		}
		
	});
	
	return false;
});


socket.on( 'message', function( data ) {
	var actualContent = $( "#messages" ).html();
	var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message
																					.replace(new RegExp("&#D83DDE04",'gi'),"<img src='../packs/basic/D83DDE04.png' height='21' width='21'>")
																					
																					.replace(new RegExp("&#D83DDC8A",'gi'),"<img src='../packs/basic/D83DDC8A.png' height='21' width='21'>") + '</li>';
	var content = newMsgContent + actualContent;
	$( "#messages" ).html( content );
	
});

ruslite 08.03.2014 10:53

может реализовать на странице где форма сама. функцию, которая будет запрещать отправлять форму не чаще 3 сек?
вот сама форма
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение"></div>
				
				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form> 

			</div>

рони 08.03.2014 10:58

ruslite,
могу только гадать может 17 строка должна стоять в 29

ruslite 08.03.2014 11:08

Цитата:

Сообщение от рони (Сообщение 301694)
ruslite,
могу только гадать может 17 строка должна стоять в 29

нет, не хочет к сожалению. А может реализовать, чтобы форму нельзя было отправлять чаше 3 сек? Как это можно сделать?

рони 08.03.2014 11:20

ruslite,
пока советую помедитировать над строкой
msg = $("#messageInput").val();

kotamirov 08.03.2014 11:25

Цитата:

Сообщение от ruslite (Сообщение 301696)
нет, не хочет к сожалению. А может реализовать, чтобы форму нельзя было отправлять чаше 3 сек? Как это можно сделать?

массив localStorage используй для хранения времени предыдущего отправления формы, и сравнивай с текущем временем.

рони 08.03.2014 11:26

ruslite,
flag = true; надо вынести за submit
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение">12345</div>

				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form>

			</div>
<script>
   flag = true;
  $( "#messageForm" ).submit( function() {
	var nameVal = $("#nameInput").val();
    msg = $("#messageInput").html();
    var canalVal = $("#canalInput").val();
    if (nameVal && msg && flag) {
		  flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000) ;
      alert("форма отправлена");
    }
   else  {alert("ждите отстоя пены")};


	return false;
});

</script>
</body>

</html>

ruslite 08.03.2014 11:29

Цитата:

Сообщение от kotamirov (Сообщение 301699)
массив localStorage используй для хранения времени предыдущего отправления формы, и сравнивай с текущем временем.

можете показать на примере?

ruslite 08.03.2014 11:30

Цитата:

Сообщение от рони (Сообщение 301700)
ruslite,
flag = true; надо вынести за submit
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение">12345</div>

				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form>

			</div>
<script>
   flag = true;
  $( "#messageForm" ).submit( function() {
	var nameVal = $("#nameInput").val();
    msg = $("#messageInput").html();
    var canalVal = $("#canalInput").val();
    if (nameVal && msg && flag) {
		  flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000) ;
      alert("форма отправлена");
    }
   else  {alert("ждите отстоя пены")};


	return false;
});

</script>
</body>

</html>

А как вынести flag?

рони 08.03.2014 11:31

ruslite,
строка 23

ruslite 08.03.2014 11:34

Цитата:

Сообщение от рони (Сообщение 301703)
ruslite,
строка 23

всм вот так?
<script>flag =true; </script>
<input type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>

ruslite 08.03.2014 11:40

посоветовали вот так
if(Date.now() - lastCallTime >= 3 * 1000) {
    socket.emit(...);
    lastCallTime = Date.now(); // или new Date().getTime();
}

Как правильно объявить lastCallTime выше кода?

рони 08.03.2014 11:48

ruslite,
ну чем вас решение то из 13 поста неустроило ??? понажимайте там отправить -- форма отправится нечаще 1 раза в три секунды
замените алерт в 33 строке на то что вам нужно

ruslite 08.03.2014 13:03

Цитата:

Сообщение от рони (Сообщение 301710)
ruslite,
ну чем вас решение то из 13 поста неустроило ??? понажимайте там отправить -- форма отправится нечаще 1 раза в три секунды
замените алерт в 33 строке на то что вам нужно

просто все данные обрабатываются в отдельном js скрипте, а форма на php странице. Мне не надо указывать переменные msg? nameVal и т.д.

ruslite 08.03.2014 13:04

$( "#messageForm" ).submit( function() {
25
    var nameVal = $("#nameInput").val();
26
    msg = $("#messageInput").html();
27
    var canalVal = $("#canalInput").val();
28
    if (nameVal && msg && flag) {
это в другом скрипте

рони 08.03.2014 13:24

ruslite,
:blink: может так вам проще будет понять алгоритм
flag = true;
  $( "#messageForm" ).submit( function() {
   if(!flag) return false;
    flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000) ;
//тут ваш код


})

ruslite 08.03.2014 13:35

Цитата:

Сообщение от рони (Сообщение 301730)
ruslite,
:blink: может так вам проще будет понять алгоритм
flag = true;
  $( "#messageForm" ).submit( function() {
   if(!flag) return false;
    flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000) ;
//тут ваш код


})

мне надо функцию, которая просто будет запрещать отправлять форму. потом форма передается через
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
		<script src="js/nodeClient.js"></script>
и все

рони 08.03.2014 13:54

ruslite,
посмотрите снова сообщение 13 там разве когда-то данные формы отправляются самой формой ? строка 38 запрещает отправлять форму.

сообщение 22 добавьте return false в 10 строку и форма снова никогда неотправится

ruslite 08.03.2014 14:17

Цитата:

Сообщение от рони (Сообщение 301733)
ruslite,
посмотрите снова сообщение 13 там разве когда-то данные формы отправляются самой формой ? строка 38 запрещает отправлять форму.

сообщение 22 добавьте return false в 10 строку и форма снова никогда неотправится

вставил в теге head
<script>
	flag = true;
  $( "#messageForm" ).submit( function() {
   if(!flag) return false;
    flag = false;
		  window.setTimeout(function () {
			  flag = true
		  }, 3000) ;
//тут ваш код

return false;
});
</script>

все как было раньше так и осталось. Что не так?

ruslite 08.03.2014 14:20

<script>
flag = true;
$( "#messageForm" ).submit( function() {
if(!flag) return false;
flag = false;
window.setTimeout(function () {
flag = true
}, 3000) ;
alert(rewrew);

false;
});
</script>
даже алерт не появляется

рони 08.03.2014 14:32

Цитата:

Сообщение от ruslite
alert(rewrew);

false;

это как?
:write:
DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение">12345</div>

				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form>

			</div>

 <script>
 flag = true;
 $( "#messageForm" ).submit( function() { var rewrew =  $('#messageInput').html()
 if(!flag) return false;
 flag = false;
 window.setTimeout(function () {
 flag = true
 }, 3000) ;
 alert(rewrew);

 return false;
 });

</script>
</body>

</html>

рони 08.03.2014 14:34

Цитата:

Сообщение от ruslite
вставил в теге head

а где элементы формы в head тогда уж
готовность страницы проверяйте
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>$(function ()
{
   flag = true;
 $( "#messageForm" ).submit( function() { var rewrew =  $('#messageInput').html()
 if(!flag) return false;
 flag = false;
 window.setTimeout(function () {
 flag = true
 }, 3000) ;
 alert(rewrew);

 return false;
 });
})


</script>
</head>

<body>
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение">12345</div>

				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form>

			</div>


</body>

</html>

ruslite 08.03.2014 14:40

Цитата:

Сообщение от рони (Сообщение 301742)
а где элементы формы в head тогда уж
готовность страницы проверяйте
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>$(function ()
{
   flag = true;
 $( "#messageForm" ).submit( function() { var rewrew =  $('#messageInput').html()
 if(!flag) return false;
 flag = false;
 window.setTimeout(function () {
 flag = true
 }, 3000) ;
 alert(rewrew);

 return false;
 });
})


</script>
</head>

<body>
<div class="example">
			<form class="form-inline" id="messageForm">
				<input id="nameInput" type="hidden" class="input-medium" value="<?php echo $log_username;?>"  />
				<input id="canalInput"  type="hidden" class="input-medium" value="<?php echo $name;?>"  />
				<div id="messageInput" name="messageInput1" placeHolder="Ваше сообщение">12345</div>

				<input  type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/>
			</form>

			</div>


</body>

</html>

данные отправляются также, но окно не появляется, если не прошло 3 сек. 3 сек прошло вывелся алерт. но форма как работает так и работает.

рони 08.03.2014 15:30

ruslite,
и кто-же отправил данные)))

ruslite 08.03.2014 15:44

Цитата:

Сообщение от рони (Сообщение 301750)
ruslite,
и кто-же отправил данные)))

в смысле? значение messageInput пришло в socket как обычно.в чем загвоздка?

ruslite 08.03.2014 17:55

спасибо за скрипт, ошибка в моих скриптах, сокет отправляет дважды.


Часовой пояс GMT +3, время: 23:43.