我的Web表单上有一个ASP.NET文本框,我使用以下代码将其转换为jQuery DatePicker:
$('#<%= txtServiceDateRequested.ClientID %>').datepicker();
那部分工作正常。我还将AutoPostBack
属性设置为True
,这样无论何时选择日期,页面都会回发。这也很好。我遇到的问题是我试图在页面回发时禁用我的其他控件。我正在使用此代码:
$(function() {
$('#<%= txtServiceDateRequested.ClientID %>').change(function () {
$('#<%= ddlTimeRequested.ClientID %>').prop('disabled', true);
$('#<%= ddlServiceType.ClientID %>').prop('disabled', true);
$('#<%= ddlService.ClientID %>').prop('disabled', true);
$('#<%= ddlGenderRequested.ClientID %>').prop('disabled', true);
$('#<%= txtServiceDateRequested.ClientID %>').attr('disabled', true);
});
});
所以我绑定到我的文本框(datepicker)的change
事件。当我添加这段代码时,确实会禁用我应该控制的控件,它似乎会进行回发,但是当我在我的C#代码上放置一个断点时:
protected void txtServiceDateRequested_TextChanged(object sender, EventArgs e)
{
FixItems(); // I'm putting a breakpoint here
}
由于某种原因,断点永远不会被击中。如果我注释掉上面的javascript代码绑定change
事件并禁用控件,那么断点会按预期命中。当我取消注释并启用上面的JS代码时,有人能告诉我为什么我的断点不会被击中吗?
编辑:
在做了一些游戏后,问题似乎是文本框本身被禁用。根据我的推测,我点击了文本框,我的jquery日历出现了。然后我选择了一个日期。然后看来我的禁用代码正在执行,然后jquery尝试将我选择的日期插入到文本框中。但由于文本框已禁用,因此不会将新日期放在那里。所以,在我的禁用代码被触发之前,我可能需要一种方法来使jquery日历代码先执行?
答案 0 :(得分:1)
您只需为文本框添加AutoPostBack="true"
即可。我已经使用以下代码进行了测试:
<html xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript">
$(function () {
$(".datepicker").datepicker({
onSelect: function () {
this.fireEvent && this.fireEvent('onchange') || $(this).change();
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" CssClass="datepicker"
OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox>
</div>
</form>
</body>
</html>
答案 1 :(得分:0)
更改方法将覆盖ASP.NET中的默认事件__doPostBack
,然后它将永远不会调用服务器。
您应该使用 Bind 来将另一个函数附加到更改方法:
$('#<%= txtServiceDateRequested.ClientID %>').bind( "change", function( event ) {
// do stuff
});
答案 2 :(得分:0)
不是在更改事件触发时禁用控件,而是将其添加到onClose或onSelect。 所以你的代码看起来像
$("#<%= txtServiceDateRequested.ClientID %>").datepicker({
onClose: function( selectedDate ) {
$('#<%= ddlTimeRequested.ClientID %>').prop('disabled', true);
$('#<%= ddlServiceType.ClientID %>').prop('disabled', true);
$('#<%= ddlService.ClientID %>').prop('disabled', true);
$('#<%= ddlGenderRequested.ClientID %>').prop('disabled', true);
$('#<%= txtServiceDateRequested.ClientID %>').attr('disabled', true);
}
});