我有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错误。
我将不胜感激任何帮助。
答案 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