Javascript 发送消息时Socket.io聊天重新加载页面

Javascript 发送消息时Socket.io聊天重新加载页面,javascript,jquery,dom,socket.io,Javascript,Jquery,Dom,Socket.io,我正在尝试上的socket.io教程,但我的问题是,当我发送消息时,页面会重新加载,而不是持久化 唯一的区别是我使用了纯DOM,而不是像教程中那样使用jquery。这是原始代码: <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> <script src="http://code.jquery.com/jquery-1.11.1.js"></script>

我正在尝试上的socket.io教程,但我的问题是,当我发送消息时,页面会重新加载,而不是持久化

唯一的区别是我使用了纯DOM,而不是像教程中那样使用jquery。这是原始代码:

    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
      });
      socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
      });
    </script>

var socket=io();
$('form')。提交(函数(){
emit('chat message',$('#m').val());
$('m').val('');
返回false;
});
socket.on('chat message',函数(msg){
$(“#消息”).append($(“
  • ”).text(msg)); });
  • 这是我的:

     <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
        <script>
          var socket = io();
          document.querySelector('form')
          .addEventListener('submit', function () {
            socket.emit('chat message',
            document.querySelector('#m').value);
            document.querySelector('#m').value = '';
            return false;
          });
    
          socket.on('chat message', function (msg) {
            var li = document.createElement('li');
            document.querySelector('#messages').appendChild(li);
            li.innerText = msg;
          });
        </script>
    
    
    var socket=io();
    document.querySelector('form')
    .addEventListener('submit',函数(){
    socket.emit('聊天信息',
    document.querySelector(“#m”).value);
    document.querySelector('#m')。value='';
    返回false;
    });
    socket.on('chat message',函数(msg){
    var li=document.createElement('li');
    document.querySelector(“#messages”).appendChild(li);
    li.innerText=msg;
    });
    
    如果我用jquery替换我的,它会很有魅力。
    有人知道问题出在哪里吗?

    使用
    preventDefault
    返回false
    addEventListener不起作用

    document.querySelector('form').addEventListener('submit', function (e) {
        socket.emit('chat message', document.querySelector('#m').value);
        document.querySelector('#m').value = '';
        e.preventDefault();
    });
    

    使用
    preventDefault
    returnfalse
    不适用于
    addEventListener

    document.querySelector('form').addEventListener('submit', function (e) {
        socket.emit('chat message', document.querySelector('#m').value);
        document.querySelector('#m').value = '';
        e.preventDefault();
    });
    

    我要在这里把它扔掉,因为我在这个页面登陆时遇到了一个类似的问题,当时我正在使用jquery,它正在重新加载


    问题是,我在头标签中有Jquery内容,而不是在正文中。

    我将把它扔到这里,因为我在使用Jquery时遇到了一个类似的问题,它正在重新加载


    问题是Jquery内容在head标记中,而不是在body中。

    将事件发出脚本移动到
    表单
    标记下方

    <form>
      <input id="m" />
      <button>Send</button>
    </form>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
          return false;
      });
      // more code..
    </script>
    
    
    发送
    var socket=io();
    $('form')。提交(函数(){
    emit('chat message',$('#m').val());
    $('m').val('');
    返回false;
    });
    //更多代码。。
    
    将事件发出脚本移动到
    表单
    标记下方

    <form>
      <input id="m" />
      <button>Send</button>
    </form>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
          return false;
      });
      // more code..
    </script>
    
    
    发送
    var socket=io();
    $('form')。提交(函数(){
    emit('chat message',$('#m').val());
    $('m').val('');
    返回false;
    });
    //更多代码。。
    
    发生这种情况是因为您正在使用

    <form>
     <input id="m" />
     <button>Send</button>
    </form>
    
    
    发送
    
    您正在使用jQuery提交它。提交表单将使页面得到刷新

    而不是使用

    你可以选择:

    <div id="sendbottom">
        <input type="text" id="msg">
        <input type="button" id="send" value="send">
    </div>
    
    
    
    要发送消息,请使用JQuery,如下所示:

    $('#send').on('click',function () {
        var msg2send = document.getElementById('msg').value;
        document.getElementById('msg').value = '';
        var iHTML = document.getElementById('messaging').innerHTML;
        var newiHTML = iHTML + '<br> <b>You</b> : '+ msg2send;
        document.getElementById('messaging').innerHTML = newiHTML;
        //Your Code Here
    });
    
    $('#发送')。在('click',函数(){
    var msg2send=document.getElementById('msg').value;
    document.getElementById('msg')。value='';
    var iHTML=document.getElementById('messaging').innerHTML;
    var newiHTML=iHTML+'
    您:'+msg2send; document.getElementById('messaging').innerHTML=newiHTML; //你的代码在这里 });
    发生这种情况是因为您正在使用

    <form>
     <input id="m" />
     <button>Send</button>
    </form>
    
    
    发送
    
    您正在使用jQuery提交它。提交表单将使页面得到刷新

    而不是使用

    你可以选择:

    <div id="sendbottom">
        <input type="text" id="msg">
        <input type="button" id="send" value="send">
    </div>
    
    
    
    要发送消息,请使用JQuery,如下所示:

    $('#send').on('click',function () {
        var msg2send = document.getElementById('msg').value;
        document.getElementById('msg').value = '';
        var iHTML = document.getElementById('messaging').innerHTML;
        var newiHTML = iHTML + '<br> <b>You</b> : '+ msg2send;
        document.getElementById('messaging').innerHTML = newiHTML;
        //Your Code Here
    });
    
    $('#发送')。在('click',函数(){
    var msg2send=document.getElementById('msg').value;
    document.getElementById('msg')。value='';
    var iHTML=document.getElementById('messaging').innerHTML;
    var newiHTML=iHTML+'
    您:'+msg2send; document.getElementById('messaging').innerHTML=newiHTML; //你的代码在这里 });
    那么是jQuery版本不起作用了吗?不,jQuery起作用了,javascript不是“如果我用我的jQuery替换了jQuery,它就像一个符咒”那么是jQuery版本不起作用了?不,jQuery起作用了,javascript不是“如果我用我的jQuery替换了jQuery,它就像一个符咒”是的,它起作用了。看起来jquery自己调用了preventdefault。是的,在jquery中使用return false调用preventdefault和StopproPagation。最后,这个解决方案对我有效。我花了3个多小时修好它。非常感谢@是的,行得通。看起来jquery自己调用了preventdefault。是的,在jquery中使用return false调用preventdefault和StopproPagation。最后,这个解决方案对我有效。我花了3个多小时修好它。非常感谢@阿迪内奥