繁体   English   中英

指向快速路线的动态表格动作

[英]Dynamic form action pointing to Express route

我一直试图在我的nodejs应用程序中创建一个HTML表单,该表单在提交时会定向到适当的快递路线。 这个答案 ,我得到了下面的解决方案:

<script>
$('#controlPanel').submit(function(event) {
  var view = document.getElementsByName('selectView').value;
  var date = document.getElementsByName('selectDate')
    .value
    .toISOString()
    .slice(0, 10);
  var action = "/".concat(view).concat("/").concat(date);
  $(this).attr('action', action);
});
</script>

但是,问题是,无论我使用哪种构成要素的方法和函数,生成的动作字符串都是错误的。

而不是类似“ http://example.page/month/2018-01-01
我得到类似“ http://example.page/?selectView=month&selectDate=2018-01-01 ”的内容

我该怎么做才能确保动态动作符合前面的示例?

编辑:所使用的HTML(也将周围的脚本html标签附加到上面的代码中):

<form id="#controlPanel">
  View:<select name="selectView">
    <option value="year">Year</option>
    <option value="month">Month</option>
    <option value="week">Week</option>
    <option value="day">Day</option>
  </select><br/>
  Date: <input type="date" name="selectDate" min="2007-01-01"><br/>
  <input type="submit" value="Submit">
</form>

发现了一些尝试解决此问题的方法:
由于未知原因,使用attr()无效。
尝试将方法设置为POST会导致异常(是的,即使我对路由器进行了更改以使路由使用POST)。
使用GET仍然会使GET参数带有? 分隔符在最后,但是尽管如此,路由仍按预期运行。

对于其他尝试做类似事情的人,我最终得到了解决方案:

<script>
 document.addEventListener("DOMContentLoaded", function () {
   document.getElementById("#controlPanel").addEventListener("submit", function(event) {
     event.preventDefault();
     var view = document.getElementsByName('selectView')[0].value;
     var date = document.getElementsByName('selectDate')[0].value !== "" ? document.getElementsByName('selectDate')[0].value.slice(0, 10) : "";
     var action = "/".concat(view).concat("/").concat(date);
     document.getElementById("#controlPanel").action = action;
     document.getElementById("#controlPanel").submit();
   });
 });
</script>

HTML的唯一相关位:

<form id="#controlPanel" method="get" action="">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM