javascript - 获取 HTML 表单以提交 "Django-ish"格式的查询

标签 javascript html forms

我想创建一个表单,将用户发送到“Django-ish”格式的 URL(尽管我没有使用 Django)。

例如 - 一个包含两个 select 控件的表单,如下所示:

<select name="location" >
  <option value="europe">Europe</option>
  <option value="asia">Asia</option>
  <option value="australia">Australia</option>
  <option value="africa">Africa</option>
  <option value="america">America</option>
</select>
<select name="category">
  <option value="food">Food</option>
  <option value="clothing">Clothing</option>
  <option value="electronics">Electronics</option>
</select>

我希望重定向位于该结构中:.../category/chosen-category+chosen-location

例如,如果用户选择了“欧洲”和“食品”,我希望表单将他/她带到:

http://wwww.mydomain.com/category/food+europe

编辑:

选择标签不必位于表单内。我乐于接受建议。

最佳答案

这是一个基于原生 JavaScript 的解决方案:

document.addEventListener('DOMContentLoaded', function(event) { 
  
  var searchForm = document.getElementById('catLocSearch');
  
  searchForm.addEventListener('submit', function(e) {
    var searchLocation = this.location.value,
        searchCategory = this.category.value,
        location = window.location;
    
    console.log('Form submitted');
    console.log(this);
    console.info('Values: ', searchLocation, searchCategory);
    console.log('New Location: ', location.protocol + '//' + location.host + '/category/' + searchCategory + '+' + searchLocation);
    
    // window.location = location.protocol + '//' + location.host + '/category/' + searchCategory + '+' + searchLocation;
    
    e.preventDefault();
  });
  
});
<form id="catLocSearch">
  <select name="location">
    <option value="europe">Europe</option>
    <option value="asia">Asia</option>
    <option value="australia">Australia</option>
    <option value="africa">Africa</option>
    <option value="america">America</option>
  </select>
  <select name="category">
    <option value="food">Food</option>
    <option value="clothing">Clothing</option>
    <option value="electronics">Electronics</option>
  </select>
  <input type="submit" value="Search" />
</form>

console.log - 调用仅用于演示目的。
您可以(并且应该)在您的生产代码中删除它们。

window.location 必须取消注释才能正常工作。
它只是被注释掉,以便我们能够看到控制台日志输出。

因此您的高效代码可能看起来像这样:

  var searchForm = document.getElementById('catLocSearch');
  searchForm.addEventListener('submit', function(e) {
    var searchLocation = this.location.value,
        searchCategory = this.category.value,
        location = window.location;
    window.location = location.protocol + '//' + location.host + '/category/' + searchCategory + '+' + searchLocation;
    e.preventDefault();
  });

关于javascript - 获取 HTML 表单以提交 "Django-ish"格式的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888041/

相关文章:

javascript - 如何使用 JQuery 删除克隆的 HTML 元素?

javascript - 在 D3 转换中获取预期的属性值

javascript - sails 调试命令在 Sails.js 中不起作用

javascript - 将 "href=javascript:"重写为 JavaScript

ruby-on-rails - 使用 Ruby 中的按钮更改属性的值

javascript - 确认选项卡不显示

javascript - 使用 Array.prototype.slice() 深度复制数组

html - 在复制纸张交互的 Web 应用程序的 CSS 上使用 cm/mm 是一个好习惯吗?

html - 将 svg 放入类中

wordpress - 如何添加空白行联系表格 7