在提交之前从表单的参数中删除空值

Max*_*ams 29 javascript forms jquery

我有一些javascript捕获表单的更改然后调用表单的常规提交功能.表单是一个GET表单(用于搜索),我在params中有很多空属性.我想做的是在提交之前删除任何空属性,以获得更清晰的URL:例如,如果有人更改'主题'选择'英语'我想要他们的搜索网址是

http://localhost:3000/quizzes?subject=English
Run Code Online (Sandbox Code Playgroud)

而不是

http://localhost:3000/quizzes?term=&subject=English&topic=&age_group_id=&difficulty_id=&made_by=&order=&style=
Run Code Online (Sandbox Code Playgroud)

就像现在一样.这纯粹是为了有一个更清晰,更有意义的网址链接到人们的书签等等.所以,我需要的是这些内容,但这是不对的,因为我不是在编辑实际的表格但是一个由表格的参数制作的js对象:

  quizSearchForm = jQuery("#searchForm");
  formParams = quizSearchForm.serializeArray();
  //remove any empty fields from the form params before submitting, for a cleaner url
  //this won't work as we're not changing the form, just an object made from it.
  for (i in formParams) {
    if (formParams[i] === null || formParams[i] === "") {
      delete formParams[i];
    }
  }
  //submit the form
Run Code Online (Sandbox Code Playgroud)

我觉得我很接近这个,但我错过了如何编辑实际表单的属性而不是创建另一个对象并编辑它的步骤.

感谢任何建议 - 最多

编辑 - 解决 - 感谢许多发布此事的人.这就是我所拥有的,这似乎完美无缺.

function submitSearchForm(){
  quizSearchForm = jQuery("#searchForm");
  //disable empty fields so they don't clutter up the url
  quizSearchForm.find(':input[value=""]').attr('disabled', true);
  quizSearchForm.submit();
}
Run Code Online (Sandbox Code Playgroud)

rog*_*pvl 29

属性disabled设置为的输入true不会随表单一起提交.所以在一个jQuery行:

$(':input[value=""]').attr('disabled', true);
Run Code Online (Sandbox Code Playgroud)

  • 如果你有`input [disabled]`的样式,使用`disabled`属性通常会改变输入的外观.如果删除元素的`name`,它将具有相同的效果,因为只提交带有名称的输入:`$(':input [value =""]').attr('name','');` (7认同)
  • 那么为什么不只是:$(':input [value =""]').attr('disabled',true); (2认同)
  • 没有完全工作,你忘了没有定义值的情况,你也必须使用"$(':input:not([value])')"选择器. (2认同)
  • _另一个问题_:用户填写的输入未提交.这是因为实际的`value` HTML属性没有填充在用户输入上(至少在最新的Chrome ...中),所以如果这个属性在页面加载时是空的,`':input [value =""]'`返回在所有情况下都为true,即使用户输入了值. (2认同)

Mar*_*mic 18

$('form#searchForm').submit(function() {
    $(':input', this).each(function() {
        this.disabled = !($(this).val());
    });
});
Run Code Online (Sandbox Code Playgroud)