2012-02-25 72 views
1

我在表单中有很多输入字段,并且每个字段都会将更改的序列化表单数据发送到服务器。如何在更改()事件触发前取消选中复选框

现在我需要避免选择一些的复选框(不能使用"disabled"属性,alert()对这些的复选框点击时触发)。

我结合click()事件试过,但它看起来像click()前触发change()事件和是否选择复选框发送串行数据。

现在我正在尝试mousedown()事件,但prop('checked', false)似乎没有工作,实际上有相反的效果 - 复选框结束始终检查。

这里的jsfiddle测试用例 - http://jsfiddle.net/F8x2X/19/

那我怎么以前change()事件取消选中复选框?

回答

1

你可以把一个类上,不应该检查的复选框,并作出检查的更改事件

Foo: <input type="checkbox" name="foo" class='notcheck' value="1" /><br/> 

<div id="result"></div> 

$(':input').change(function(e){ 
    if($(this).hasClass('notcheck')){ 
     alert('you can\'t check this !'); 
     $(this).removeProp('checked'); 
     return; 

    } 
    var data = $(':input').serialize(); 
    var checked = ''; 

    if ($(this).is(':checked')) { 
     checked = 'Yes'; 
    } else { 
     checked = 'No'; 
    } 

    $('#result').append('Checked: ' + checked + '; Serialized: ' + data + '<br/>'); 
}); 

小提琴这里 http://jsfiddle.net/nicolapeluchetti/F8x2X/20/

+0

感谢您的帮助,越来越接近。我从你的例子中删除了'return;'语句,因为我仍然希望发送其他表单数据。现在看起来'serialize()'不再序列化复选框,但是如果再次单击复选框,它看起来好像在任何其他单击时都会被检查 - http://jsfiddle.net/F8x2X/22/ – arnaslu 2012-02-25 14:13:16

+0

好的,我用'prop('checked',false)'替换了'removeProp('checked')',现在工作正常。最终结果 - http://jsfiddle.net/F8x2X/25/ – arnaslu 2012-02-25 14:34:02

-1

不知道我得到的问题,而是这个它:FIDDLE

var data = $(':input').prop('checked', false).serialize(); 
+0

不,可以选中一些复选框和广播框,因此我无法禁用所有这些选项。 – arnaslu 2012-02-25 14:28:56

相关问题