使用 d3 而不是 jQuery 来处理表单输入会导致重新加载“/”

Using d3 instead of jQuery to process form input causes re-load of "/"

本文关键字:新加载 加载 d3 jQuery 输入 表单 处理 使用      更新时间:2023-09-26

要点 http://bl.ocks.org/gregsgit/7cbe5a54fdae2492a826或 https://gist.github.com/gregsgit/7cbe5a54fdae2492a826

我尝试只使用 d3 而不是 d3 和 jQuery。后端是node.js + express + http + fs + socket.io。前端使用套接字客户端,d3,jQuery。

替换以下内容:

$('form').submit(function(){
  socket.emit('sent message', $('#theInput').val());
  $('#theInput').val('');
  return false;
});

d3.select("#theForm").on("submit", function() {
  var inp = d3.select("#theInput");
  var v = inp.property("value");
  inp.property("value", "");
  socket.emit('sent message', v);
  return false;
});

导致重新加载"/",这将删除我在 index.html 中累积的状态。

换句话说,在节点顶层的多重绘制服务器.js中,我在请求"/"时打印到控制台。使用 jquery 代码,"/"加载一次,我可以多次提交表单而无需重新加载。使用 d3 表单处理,每次输入表单后都会重新加载"/"。

有什么想法吗?

问题是除了返回 false 之外,您还需要取消表单的提交,这可以通过调用 event.preventDefault 来完成。可以通过在 .on("submit", ...) 函数开始时调用 d3.event.preventDefault() 来使用 D3 执行此操作。