为什么jquery .live()和.on()不能像ASP.NET Updatepanel那样工作?

时间:2012-08-20 14:39:28

标签: asp.net ajax updatepanel jquery

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

我的user.ascx有一些复选框可以禁用/启用其他控件。我在javascript中添加到user.ascx,但是当updatepanel更新(点击这两个按钮中的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错误。

我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分: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