代码之家  ›  专栏  ›  技术社区  ›  Tareq

如何更改提交表单的查询字符串

  •  0
  • Tareq  · 技术社区  · 5 年前

    我有一个包含许多DropDownList的表单,我希望在提交表单时,将未选择的表单排除在查询字符串中。 所以我可以使用一些模块或过滤器来改变这种行为吗?

    前任: 当我搜索测试时,URL将 什么行动?Q=测试&选择1=选择2= 所需的URL是: 什么行动?q=检验

    <form action="/search" action="Get">
            <label>Search term <input name="q"></label>
    
    <select id="select1" name="select1">
    <option value="1">option 1</option>
    </select>
    
    <select id="select2" name="select2">
    <option value="1">option 1</option>
    </select>
    
    
            <input type="submit">
        </form>
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Tetsuya Yamamoto    5 年前

    由于表单操作使用的是get方法,因此可以处理提交事件以防止正常提交,并使用 replace() 使用regex函数,然后使用 location.href 要重定向到目标URL,请执行以下操作:

    $('form').submit(function (e) {
        e.preventDefault(); 
    
        var queryString = $(this).serialize().replace(/&?[\w\-\d_]+=&|&?[\w\-\d_]+=$/gi, "");
        url = this.getAttribute('action') + (queryString.length > 0 ? "?" + queryString : "");
    
        // returns URL /search?q=something when both select elements are empty 
        location.href = url;
    });
    

    或禁用 select 使用 attr() prop() 要防止在查询字符串中使用它们,请使用普通表单提交事件:

    $('form').submit(function () {
        $('select').each(function () {
            if ($(this).val() == '') {
                $(this).prop('disabled', 'disabled'); // or prop('disabled', true)
        });
    });