我有一个JQuery日期掩码,但是当我运行该页面时会抛出错误“Microsoft JScript运行时错误:对象不支持此属性或方法”。
现在,这个特定JQuery的工作控件将动态添加到转发器控件中。通过这个,我查看了控件的ID,它在Visual Studio中打破和停止,以及在aspx页面上显示的内容。除了JQuery在开始时具有的“#”之外,它们是相同的,不在页面上。
在我的JQuery代码中,我有:
JQuery(function ($) {
$('#<%=date.ClientID %>').mask("99/99/9999");
});
在找到控件时,有没有告诉JQuery不要包含“#”?我使用了UniqueID但是这会将任何下划线更改为“$”,这与页面上的内容不同。我唯一的问题是在ID的开头加上“#”符号。我甚至添加了一个警告框来检查文本框是否存在并且它返回为null。我甚至试过在文本框中添加一个CssClass属性,但这也是同样的错误。
请注意,具有文本框的自定义用户控件将以编程方式添加到转发器中。
以下代码:
使用转发器进行用户控制
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Step4.ascx.cs"
Inherits="Prototype.Step4" %>
<div style="height: 800px; margin-top: 20px; overflow-x: hidden; overflow-y: scroll">
<p>
<b>Edit Stage</b></p>
<asp:Repeater ID="Edit" runat="server">
<HeaderTemplate>
<table>
</HeaderTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="RowLabel" runat="server" Text="Label" ></asp:Label>
</td>
<td>
<asp:PlaceHolder ID="ControlPlaceHolder" runat="server"></asp:PlaceHolder>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</div>
动态添加到上述控件的Mask Control
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MaskControl.ascx.cs" Inherits="Prototype.CommonControls.MaskControl" %>
<asp:TextBox ID="date" runat="server" Width="136px" CssClass="dateMask"></asp:TextBox>
<script src="../../Scripts/jquery-1.4.2.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.maskedinput.js" type="text/javascript"></script>
<script type="text/javascript">
// jQuery(function ($) {
// $('.dateMask').mask("99/99/9999");
// });
alert(document.getElementById("MaskedDateBox"));
</script>
有人可以帮忙吗?
答案 0 :(得分:0)
你尝试过使用:
$(document).ready(function(){ $(dateMask).mask( “99/99/9999”); });
动态添加usercontrol不会更改添加的控件的css类,它将根据命名容器更改id。
答案 1 :(得分:0)
jQuery(function() {
jQuery('.dateMask').mask("99/99/9999");
});
应该有用。
我不确定你是什么意思:
告诉JQuery不要包含“#” 找到控件时
当你在选择器中使用#时,它意味着通过id找到控制。
使用类选择器而不是id选择器来获取asp.net控件更简洁。
所以要稍微扩展一下解释。如果您没有使用ajax,那么生成控件的方式并不重要 - 当$(document).ready()事件触发并设置了类时,页面上会出现所有文本框。在这种情况下,您只需运行以下代码一次(即将js放在页面而不是控件中)
jQuery(function() {
jQuery('.dateMask').mask("99/99/9999");
jQuery('.phoneMask').mask("(999) 999-9999"); // if you have one
...
});
如果使用ajax加载控件,则每次ajax请求完成时都必须运行上面的javascript代码。您可以通过在Page_Load中使用ScriptManager注册脚本来执行此操作,如下所示:
public void Page_Load(object sender, EventArgs e) {
ScriptManager.RegisterStartupScript(updatePanel, updatePanel.GetType(), "mask", "initMask();", true);
}
您必须在页面上定义initMask()javascript函数。
function initMask() {
jQuery('.dateMask').mask("99/99/9999");
jQuery('.phoneMask').mask("(999) 999-9999"); // if you have one
...
}