用JS提交表单时未设置的Post变量
Post variables not set when submitting a form with JS
我有一个表单,我提交与javascript一旦用户点击一个标签。有一个奇怪的行为,数据没有发布。但是如果我延迟提交表单(即使延迟为0),它也可以工作。
这里是html:
<form action="/other-page" method="post">
<input id="val-1" type="checkbox" name="filter[]" value="1">
<label for="val-1">Value 1</label>
<input id="val-2" type="checkbox" name="filter[]" value="2">
<label for="val-2">Value 2</label>
</form>
脚本:
<script>
$('label').click(function() {
var form = $(this).closest('form')
// if I use the following line the values won't be set
form.submit()
// If I use a `setTimeout` it works, even with a delay of 0
setTimeout(function() {
form.submit()
}, 0)
})
</script>
这不是一个大问题,因为我可以用setTimeout
工作,但是用0的延迟写这个真的很难看。我以为是浏览器的bug,但我用Chrome和Firefox测试了一下,结果是一样的。
知道发生了什么事吗?
这是因为你在听标签点击。尝试监听复选框点击。
$('input[type=checkbox]').click(function() {
$(this).closest('form').submit();
});
点击标签意味着浏览器将"点击"关联的元素。由于您是在单击标签时提交表单的,因此它不会给浏览器这样做的机会。
setTimeout with 0之所以有效,是因为这是一个技巧,直到浏览器完成当前操作后才发布执行。您可以在setTimeout(fn, 0)有时有用的原因中找到更多信息?
有人(我不记得他的用户名)发布了解决方案,但被否决了,所以他删除了他的答案。但他的解决方案是正确的,所以在这里:
我所需要做的就是在输入上使用click事件而不是标签
$('input[type=checkbox]').click(function() {
$(this).closest('form').submit()
})
相关文章:
- Angular 2:如何在 GET 和 POST 请求中设置 double、float、int 和布尔类型参数
- 当使用预先签名的POST url将文件上传到AWS S3时,设置随机文件名
- jQuery:在ajax post的图像上设置不同的大小
- 无法在 $.post 回调中设置作用域变量
- 如何在 aspx-response 中设置 $.post()-函数的“status”参数
- 如何调用 $.post 并设置内容类型多部分/表单数据数据
- 如何在 ASPX 页的代码隐藏中使用 POST 设置图像的 url
- JQuery.post 从服务器获取cookie,但不在我的计算机上设置它们
- 如何使用 JQuery 进行 POST、检索结果以及使用结果来设置对象属性
- 将URL设置为Java weblet的jQuery.post()
- 如何为XHR POST参数设置动态URL
- 如何在没有POST/GET/FORM的情况下在onclick事件HTML中设置PHP会话
- 在POST请求期间,无法在IE 8中的ajax请求标头上设置内容类型
- 如何根据Node.js中的post参数之一为所有请求设置时区
- 使用循环从POST设置变量和字符串
- 在Jtable(Jquery)中删除操作时,csrf令牌设置为post参数
- 使用Javascript设置隐藏字段值;使用PHP post方法发送数据
- 在nodejs中使用request包设置post request超时
- 设置post和break for循环
- 重新设置POST主体为空