我有一个GridView,它的模板列中有一个CheckBox和三个TextBox。 逻辑是,当我检查CheckBox时,应该启用相应的TextBox。如果取消选中CheckBox,则应禁用相应的TextBoxes。我已经为此功能编写了JavaScript。
一切正常,但在该页面中我也有一个DropDownList。当我更改DropDownList值时,页面获得PostBack,那时我丢失了JavaScript功能,即GridView中启用的TextBox被禁用。如何解决这个问题?
答案 0 :(得分:4)
在更新面板中的每个帖子之后,您需要重新初始化您的javascript ,因为您了解html的结构已更改并且javascript运行在更新面板之后不存在的上一个更新。 Microsoft提供了执行此操作的功能,如下所示。
这是javascript行。
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function InitializeRequest(sender, args) {
}
function EndRequest(sender, args) {
// here initialize again your javascript
}
</script>
答案 1 :(得分:1)
使用ASP Grid的RowCreated事件在复选框中添加客户端功能,这样客户端功能将保留在每个回发
答案 2 :(得分:0)
您必须使用ScriptManager.RegisterStartupScript
方法在每个回发时注册您的javascript才能运行它:here's一个示例(针对英文文章编辑,抱歉:p)。
答案 3 :(得分:-1)
使用自动回发复选框可以从服务器端代码启用禁用文本框。这将更新视图状态,因此将在选择更改时进行维护。在UpdatePanel中使用这些用于ajax。或者,您也可以将下拉列表添加到updatepanel中,以便选择更改不会影响其他页面元素。
答案 4 :(得分:-1)
JavaScript正在开发DOM。当页面从ViewState获取PostBack值时会写入DOM并覆盖您的JavaScript更改。你应该以持久的方式存储复选框的状态,即。 jQuery data()或hiddenfield以及在PostBack将更改写回DOM之后。