[英]JQuery plugin not working
我有一个JQuery日期掩码,但是当我运行该页面时,它将引发错误“ Microsoft JScript运行时错误:对象不支持此属性或方法”。
现在,这个特定的JQuery打算工作的控件被动态添加到转发器控件中。 通过此操作,我查看了控件的id,在Visual Studio中该控件的中断和停止位置以及aspx页上显示的内容。 这些ID除了JQuery开头的“#”(不在页面上)外,其他ID相同。
在我的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 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>
有人可以帮忙吗?
您是否尝试过使用:
$(document).ready(function(){$(。dateMask).mask(“ 99/99/9999”);});
动态添加usercontrol不会更改所添加控件的css类,它将根据其命名容器更改id。
jQuery(function() {
jQuery('.dateMask').mask("99/99/9999");
});
应该管用。
我不太确定您的意思是:
告诉JQuery在找到控件时不要包含“#”
在选择器中使用#时,表示按ID查找控件。
使用类选择器而不是ID选择器IMHO来获取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
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.