让它变得非常简短。
我有一个带有method =" GET"的AJAX表单,因为我想反映URL中的所有更改(并且之后可以访问它)。 当表单元素发生更改时,表单将自动提交给服务器。在服务器上,我使用" history pushState"重写URL。
我使用Ruby-on-Rails作为服务器端技术,如果重要的话。
其中一个元素复选框数组(可以选择多个元素) - 它是用户希望看到的参数列表。
现在问题本身 - 假设我们第一次访问此页面。 到目前为止,没有选中任何复选框。然后我们检查,例如,第一个复选框。 触发事件 - 表单已提交 - > url被正确重写。 然后我取消选中此复选框 - >事件被触发 - >表单已提交 - > url再次正确重写!
到目前为止,一切都是正确的。
现在这种情况不起作用。 我勾选此复选框 - >表格已提交 - >网址被改写了。正确。然后,我点击"刷新" (F5或Ctrl-R)。我看到复选框被选中(因为它应该是),但是......我尝试UNCHECK这个复选框,但由于服务器端的一些奇怪的原因,我仍然看到这个数组值到达服务器。当然,它也反映在URL中 - 它存在于那里(虽然它不应该)。
对不起凌乱的解释。
我做错了什么?
P.S Form与普通参数(主要是字段)一起正常工作。
P.P.S我真的很好奇 - 那里发生了什么,我甚至试图在通过执行以下代码提交到服务器之前看到表单值:
$("#my-form").on("ajax:beforeSend", function(){
console.log("FORM BEFORE SUBMISSION: " + $(this).serialize());
});
那里没有复选框。哪个是对的!
提前致谢!
P.P.P.S这是我的想法一般(非常简短地)实施的方式:
<form method="GET" action="/search/?" id="my-form" data-remote="true">
... (some form elements here as well)
<input type="checkbox" name="search[types][]" value="1">
<input type="checkbox" name="search[types][]" value="2">
<input type="checkbox" name="search[types][]" value="3">
... (and submit button)
</form>
$("#my-form").change(function(){ $(this).submit(); });
答案 0 :(得分:0)
对不起大家浪费你宝贵的时间。
我发现了问题 - 我使用查询参数作为形式&#34;动作&#34;属性,所以提交表单导致查询参数复制每次我在提交页面之前刷新页面。
容易:)首先应该考虑一下。