Как сделать таймер
привет. Есть код
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мс. Как сделать? Спасибо |
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,
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 ); }); |
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 ); }); |
может реализовать на странице где форма сама. функцию, которая будет запрещать отправлять форму не чаще 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> |
ruslite,
могу только гадать может 17 строка должна стоять в 29 |
Цитата:
|
ruslite,
пока советую помедитировать над строкой msg = $("#messageInput").val(); |
Цитата:
|
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,
строка 23 |
Цитата:
<script>flag =true; </script> <input type="submit" value="Отправить" onclick="$('.emoji-wysiwyg-editor').html('')"/> |
посоветовали вот так
if(Date.now() - lastCallTime >= 3 * 1000) { socket.emit(...); lastCallTime = Date.now(); // или new Date().getTime(); } Как правильно объявить lastCallTime выше кода? |
ruslite,
ну чем вас решение то из 13 поста неустроило ??? понажимайте там отправить -- форма отправится нечаще 1 раза в три секунды замените алерт в 33 строке на то что вам нужно |
Цитата:
|
$( "#messageForm" ).submit( function() { 25 var nameVal = $("#nameInput").val(); 26 msg = $("#messageInput").html(); 27 var canalVal = $("#canalInput").val(); 28 if (nameVal && msg && flag) {это в другом скрипте |
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>и все |
ruslite,
посмотрите снова сообщение 13 там разве когда-то данные формы отправляются самой формой ? строка 38 запрещает отправлять форму. сообщение 22 добавьте return false в 10 строку и форма снова никогда неотправится |
Цитата:
<script> flag = true; $( "#messageForm" ).submit( function() { if(!flag) return false; flag = false; window.setTimeout(function () { flag = true }, 3000) ; //тут ваш код return false; }); </script> все как было раньше так и осталось. Что не так? |
<script>
flag = true; $( "#messageForm" ).submit( function() { if(!flag) return false; flag = false; window.setTimeout(function () { flag = true }, 3000) ; alert(rewrew); false; }); </script> даже алерт не появляется |
Цитата:
: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> |
Цитата:
готовность страницы проверяйте <!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,
и кто-же отправил данные))) |
Цитата:
|
спасибо за скрипт, ошибка в моих скриптах, сокет отправляет дважды.
|
Часовой пояс GMT +3, время: 23:43. |