event.preventDefault()不符合jquery.trigger(“点击”)

时间:2014-02-26 18:41:15

标签: javascript jquery checkbox

我页面上的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上按预期工作!

1 个答案:

答案 0 :(得分:0)

更新

实际上,我错过了一些非常明显的东西。当您致电trigger()时,您需要指定要触发的事件,因此需要trigger('click')


如果我正确阅读它,你说它仍然显示为已选中,但您希望它向服务器报告为未选中。

那不太可能。元素没有两个这样的状态,只有一个。

您可以做的是将复选框更改为取消选中,提交表单,然后再将其标记为已选中。