繁体   English   中英

jQuery插件不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM