0

我有一个 jQuery 对话框,其中包含带有多个复选框的表。

$("#custom-modal").dialog({
            height: 200,
            modal: true,
            buttons: { "OK": function () {
                var table1 = $("#MainContent_rtc1_customTable").html();
                alert(table1);
                //$.session('mytbl', $("#customTable").val());
                $.ajax({
                    type: "POST",
                    url: "MyPage.aspx/BindCustom",
                    data: ({ param1: table1 }),
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(errorThrown);
                    },
                    success: function (result) {
                        alert("success");
                    }
                });

                $(this).dialog("close");
                return true;
            }, "Cancel": function () {
                $(this).dialog("close");
                return false;
            }
            }

        });
    });

    $(':checkbox').click(function () {
        var $this = $(this);
        if ($this.is(':checked')) {
            //alert(event.target.id);
            $this.attr('checked', false);
        } else {
            //alert(event.target.id);
            $this.attr('checked', true);
        }
    });

更改复选框的状态后,当我看到带有 alert(table1) 的表格的 html 代码时;(按确定按钮后);我看到所有复选框的状态都已选中。所以他们不会被改变。?

4

3 回答 3

0

尝试使用$(this).removeAttr('checked');而不是$this.attr('checked', false);

于 2012-10-04T14:03:01.927 回答
0
$('input[type=checkbox]').click(function () {
        var $this = $(this);
        if (this.checked) {
            //alert(event.target.id);
            $this.prop('checked', false);
        } else {
            //alert(event.target.id);
            $this.prop('checked', true);
        }
});
于 2012-10-04T13:35:14.523 回答
0

如果它们是 ASP 复选框,则实际的复选框输入不是控件。除此之外,您似乎没有正确绑定事件,正如wirey所提到的,如果您只是尝试更改选中的属性,则不需要。

如果您仍需要将事件处理程序添加到复选框,请参阅此帖子:

需要选中所有复选框并为每个复选框动态添加特定的事件处理程序

该问题被报告为错误,但随后贴花无效且未修复(http://bugs.jquery.com/ticket/7594)。

您可以做的一件事是正确处理点击事件,然后设置一个可以检查的自定义变量。在 asp 中,这将很难检查,因为复选框不仅仅是输入,它们与 span 一起打包,并且所有类和属性通常都添加到 span,而不是框。

因此,根据您的需要,您可以执行以下操作:

var table1;

$('.isCheckBox').each(function(){
    //default value set here
    $(this).attr('isChecked','false');
});

$('input:checkbox').click(function (event) {
    if($(this).prop('checked') == true)
    {
       $(this).attr('data-isChecked','true'); 
    }
    else
    {
        $(this).attr('data-isChecked','false'); 
    }

    table1 = $('#thetable').html();
    alert(table1);
});

带有 HTML 的:

<table id="thetable">
<tr>
    <td><input class='isCheckBox' type="checkbox"/></td>
    <td><input class='isCheckBox' type="checkbox"/></td>
    <td><input class='isCheckBox' type="checkbox"/></td>
</tr>

小提琴:http: //jsfiddle.net/DwerK/9/

然后检查属性“data-isChecked”。您需要添加数据前缀,以便 HTML 进行验证。

现在我推测您可以将属性添加到父元素,然后在后面的代码中检查它,不确定这将如何工作并且没有实例来检查它。

我希望这会有所帮助。

编辑:Wirey 要求查看问题,据我了解,这说明了问题:http: //jsfiddle.net/w22Q4/2/

于 2012-10-17T20:42:44.140 回答