Javascript 页面重新加载,URL后缀为“/?”&引用;,提交事件后-不需要应用规范解决方案

Javascript 页面重新加载,URL后缀为“/?”&引用;,提交事件后-不需要应用规范解决方案,javascript,jquery,html,socket.io,Javascript,Jquery,Html,Socket.io,下面是socket.io上的简单聊天应用程序教程,当表单元素触发“submit”事件时,页面上的jQuery片段会发出一个“message”事件,本地运行的服务器应该检测并记录该事件。但事实并非如此——页面将重新加载。我知道是因为 运行服务器的命令提示符显示的行为与我刚才编程的用户重新加载页面时显示的行为相同(记录“user has connected/disconnected”)——这是本教程的一部分 页面的URL突然后缀为“/”,这可能意味着它需要一些代码中没有提供的查询参数 显然,标准

下面是socket.io上的简单聊天应用程序教程,当表单元素触发“submit”事件时,页面上的jQuery片段会发出一个“message”事件,本地运行的服务器应该检测并记录该事件。但事实并非如此——页面将重新加载。我知道是因为

  • 运行服务器的命令提示符显示的行为与我刚才编程的用户重新加载页面时显示的行为相同(记录“user has connected/disconnected”)——这是本教程的一部分
  • 页面的URL突然后缀为“/”,这可能意味着它需要一些代码中没有提供的查询参数
显然,标准解决方案都不起作用:

  • 将按钮类型更改为“button”不是一个选项,因为Enter键必须保持可用状态才能提交用户的聊天信息
  • 教程中的示例代码已经包含
    returnfalse
  • .submit()
    函数指定
    事件
    参数并执行
    事件.preventDefault()
    事件.stopPropagation()也不起作用
我被难住了,而且非常沮丧。这种行为是有原因的,我想知道到底是什么。非常感谢您的帮助

这是我的密码:

index.js

var express = require("express");
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendfile('index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
});

var port = Number(process.env.PORT || 5000);

http.listen(port, function(){
  console.log('listening on *:' + port);
});
index.html

<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
    <script src="/socket.io/socket.io.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
  </head>
  <body>
    <script>
      var socket = io();

      $('form').submit(function(e){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
      });
    </script>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
  </body>
</html>

Socket.IO聊天
*{边距:0;填充:0;框大小:边框框;}
正文{字体:13px Helvetica,Arial;}
表单{background:#000;填充:3px;位置:固定;底部:0;宽度:100%;}
表单输入{边框:0;填充:10px;宽度:90%;右边距:5%;}
窗体按钮{宽度:9%;背景:rgb(130224255);边框:无;填充:10px;}
#消息{列表样式类型:无;边距:0;填充:0;}
#消息li{padding:5px 10px;}
#留言李:第n个孩子(奇数){背景:#eee;}
var socket=io();
$('form')。提交(函数(e){
emit('chat message',$('#m').val());
$('m').val('');
返回false;
});
    邮寄
    尝试使用document.ready函数,因为您试图在元素存在之前绑定事件处理程序

     <script>
    
      var socket = io();
    $(function(){
      $('form').submit(function(e){
        e.preventDefault();
        socket.emit('chat message', $('#m').val());
        $('#m').val('');        
      });
    })
    </script>
    
    
    var socket=io();
    $(函数(){
    $('form')。提交(函数(e){
    e、 预防默认值();
    emit('chat message',$('#m').val());
    $('m').val('');
    });
    })