在JQuery Mobile中动态控制多个复选框
Controlling multiple checkboxes dynamically in JQuery Mobile
我在实现一个可以多次更新一组复选框状态(使用JQueryMobile框架定义)的控件时遇到了一个问题。
非常简单的游乐场代码在这里:http://jsfiddle.net/XR44Q/3/(使用JQuery 1.9.1和JQueryMobile 1.3.0, 26行html+javascript代码)实际上,问题是简单的显示比解释。使用组控制复选框,看看组框如何在两次点击组控制后停止响应。代码和想法是如此简单,它应该只是工作:)
jsfiddle的代码在这里供将来参考:
HTML:<form>
<input id="group_control" name="g" type="checkbox" />
<label for="group_control">Group</label>
<fieldset data-role="controlgroup" data-type="vertical" class="sub_cat">
<input id="c01" name="c01" type="checkbox" class="cXX" />
<label for="c01">A</label>
<input id="c02" name="c02" type="checkbox" class="cXX" />
<label for="c02">B</label>
<input id="c03" name="c03" type="checkbox" class="cXX" />
<label for="c03">C</label>
</fieldset>
</form>
Javascript: $(document).ready(function () {
$("#group_control").click(function () {
// the checkbox state can be correctly retrieved
alert("Group checked? "+$('#group_control').is(':checked'));
$("INPUT[class='cXX']").attr(
'checked', $('#group_control').is(':checked')
).checkboxradio("refresh");
});
});
复选框可以在前两次更改中正确更新。因此,从未选中状态开始,控件可以将所有框转换为已选中状态,然后再将它们转换回未选中状态。但是,此时控件不能再选择任何框。
在此状态下,用户仍然可以通过单击单个复选框来控制它们。如果复选框被用户修改,则运行复选框控件在尝试选择复选框时将不起作用,并且在尝试取消选择复选框时将正确取消选择所有复选框。因此,只有当控件尝试选择之后的复选框组时,才会出现问题,修改它们两次
。如果你检查页面dom和属性,你可以看到JQueryMobile生成的input元素在控件事件之后被正确更新,但是'data-icon'属性在应该转换为'checkbox-on'时仍然保持'checkbox-off'。用户点击复选框正确更新这个属性,所以问题实际上是理解为什么'data-icon'属性不能被jquery mobile正确管理。
感谢您的反馈!
你应该用prop代替attr:
$("#group_control").click(function() {
//alert("Group checked? "+$('#group_control').is(':checked'));
$("INPUT[class='cXX']").prop('checked', this.checked).checkboxradio("refresh");
});
工作演示:http://jsfiddle.net/XR44Q/4/
看一下这篇关于属性和属性之间区别的文章
开头没有"checked"属性。第一次检查时,它获得一个checked属性为true。第二次,它将已检查的属性更改为false -但它仍然有一个已检查的属性,因此在此之后它继续尝试将其更改为false。您需要根据检查的属性是否存在之外的其他内容进行评估。
- JavaScript-取决于多个下拉选择或复选框的动态链接
- 动态添加复选框和输入框 jQuery
- 动态创建唯一的复选框
- 基于所选下拉列表值创建动态复选框
- “动态创建的表”上的复选框(每行最多只能选择1个)
- 动态填充复选框
- 动态选中文本区域中现有项目的复选框组
- 函数更改不适用于动态创建的表的复选框
- 如何将jquery数组添加到html表单中,以将复选框动态添加到对话框中
- 将复选框动态添加到 jquery dilaogue 框中
- 聚合物核心标签和核心复选框动态
- HTML 复选框动态附加到列表,但 JavaScript 不起作用
- 如何勾选“复选框”动态- jQuery移动版
- js复选框用于控制输入字段的启用/禁用状态
- AngularJS复选框动态ng-true-value表达式
- 在JQuery Mobile中动态控制多个复选框
- Angular js基于复选框动态绑定数据列表
- 通过选择复选框动态创建弹出表单
- 使用javascript中的复选框动态添加表列
- 使用 Javascript 将复选框动态添加到 Symfony 2 表单中