0

我有 1 个页面,其中有 1 个更新面板,其中包含 1 个用户控件(我们称之为 user.ascx)和 2 个按钮。

我的 user.ascx 有一些复选框可以禁用/启用其他控件。我在添加到 user.ascx 的 javascript 中执行此操作,但是当 updatepanel 更新(单击这 2 个按钮中的 1 个后的异步回发)时,我的复选框(单击或更改)的 javascript 事件不会被触发。我知道我可以用函数 pageLoad(sender,args) 包装 $().ready() 并且它工作得很好,但根据该页面http://blog.dreamlabsolutions.com/post/2009/03/25/jQuery- live-and-ASPNET-Ajax-asynchronous-postback.aspx最好使用 live() 函数。

不幸的是,所有可用的绑定事件的方法,如 .click()、.change()、.bind()、.live() 和 .on() 在回发后都无法在异步回发后工作。

不起作用的代码示例:

<script type="text/javascript">
         $().ready(function () {
    var ddlAge= $("#<%= ddlAge.ClientID %>");
    var cboxFirst= $("#<%= cboxFirst.ClientID %>");
    var cboxSecond= $("#<%= cboxSecond.ClientID %>");


          $(document).on("change", cboxFirst, function () {
                if (cboxFirst.is(":checked")) {
                    ddlAge.attr("disabled", "disabled");
                    ddlAge.val("");
                }
                else { ddlAge.removeAttr("disabled");  }
            });

          cboxSecond.live('change',function () {
                if (cboxSecond.is(":checked")) {
                    ddlAge.attr("disabled", "disabled");
                    ddlAge.val("");
                }
                else { ddlAge.removeAttr("disabled");  }
            });

});
</script>

两个复选框仅在回发后起作用。我可能会做错什么?有没有人有这样的问题?我正在使用 Jquery 1.7.1,但没有收到任何 js 错误。

我将不胜感激任何帮助。

4

1 回答 1

1

我很惊讶这些.on作品。根据文档http://api.jquery.com/on/它的第二个参数应该是选择器字符串而不是 jquery 对象。

我会尝试这样的事情:

$(document).on("change", "#<%= cboxFirst.ClientID %>", function () {
    if ($(this).is(":checked")) {
         ddlAge.attr("disabled", "disabled");
         ddlAge.val("");
    }
    else { ddlAge.removeAttr("disabled");  }
});

只要 ClientID 保持不变,即使 UpdatePanel 替换了其所有内容,该事件仍然有效。

此外,.live已被弃用,或.on

于 2012-08-20T17:19:29.703 回答