我页面上的form
内有复选框:
<form id="oneform" action="blah..">
<input type="checkbox" name="checkboxes" id="chkbox1"/>Checkbox1
<input type="checkbox" name="checkboxes" id="chkbox2"/>Checkbox2
...
注意:选中<取消选中 任何 复选框后,系统会提交此表单。这是jQuery代码:
$("input[name='checkboxes']").bind("click",function(e) {
e.preventDefault();
....
$("#oneform").submit();
});
e.preventDefault()在上述功能中的作用是:如果选中该复选框并单击该框,则防止默认将确保它保持在检查状态,以便浏览器在表单提交之前记录复选框状态。因此,在表单提交后,将按预期取消选中该复选框,在“后退”按钮上,我将再次选中该复选框。这对我来说符合预期
然后我在该表单上有一个div,它显示了显示已选中复选框名称的元素列表。
<div>
<% This is a JSTL code: for each element %>
<a class="close-tag" href="#" value="<% JSTL put the checkbox id %>"><span><% jSTL put checkbox name</span> X</a>
<% end %>
</div>
如果单击“X”,则会出现如下所示的jQuery Handler:
$(".close-tag").bind('click', function(e) {
e.preventDefault() // again for same reasons as mentioned above
// get the name of checkbox id from event target
.....
var selector = ... // checkbox id
// fake the checkbox clicking event
$("#"+selector).trigger("click");
// doing the above goes to the above jquery snippet as you would expect.
// the checkbox also remains checked as expected due to e.preventDefault()
// However on server side it should send the checkbox as "unchecked" instead it sends as checked
});
我有没有想过添加任何内容?它不适用于FF,Chrome 感谢您的任何指示!
更新
将$(selector).trigger()
替换为vanilla JS替代:document.getElementById(selector).click()
......我能够解决这个问题。
在FF,IE8 / 9,safari,chrome,opera yay上按预期工作!
答案 0 :(得分:0)
更新
实际上,我错过了一些非常明显的东西。当您致电trigger()
时,您需要指定要触发的事件,因此需要trigger('click')
。
如果我正确阅读它,你说它仍然显示为已选中,但您希望它向服务器报告为未选中。
那不太可能。元素没有两个这样的状态,只有一个。
您可以做的是将复选框更改为取消选中,提交表单,然后再将其标记为已选中。