JQuery插件无法正常工作

时间:2010-12-04 14:16:50

标签: c# asp.net jquery jquery-plugins

我有一个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>

有人可以帮忙吗?

2 个答案:

答案 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
    ...
}