2010-12-04 117 views
0

我有一個JQuery日期掩碼,但是當我運行頁面時,它會引發錯誤「Microsoft JScript運行時錯誤:對象不支持此屬性或方法」。JQuery插件不工作

現在,這個特定的JQuery意圖工作的控件被動態添加到中繼器控件中。通過這個,我查看了控件的id,它在Visual Studio中的停頓和停止以及aspx頁面上顯示的內容。除了JQuery在開始時所使用的「#」之外,ID是相同的,這不在頁面上。

在我的jQuery代碼我有:

JQuery(function ($) { 

$('#<%=date.ClientID %>').mask("99/99/9999"); 

}); 

有沒有去告訴JQuery的不包括「#」找到控制什麼時候?我使用了UniqueID,但是這會將任何下劃線更改爲「$」,這與頁面上的內容不同。我唯一的問題是在ID開始時用「#」號。我甚至添加了一個警告框來檢查文本框是否存在,並且它返回爲空。我曾嘗試在文本框中添加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> 

屏蔽控制動態添加到上述

<%@ 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

你試圖封閉CDATA之間你的腳本? – Codex73 2010-12-04 14:32:24

回答

0

你嘗試使用:

$(文件)。就緒(函數(){$ (dateMask).mask( 「99/99/9999」); });

動態添加usercontrol不會改變添加的控件的css類,它將根據它的命名容器更改id。

+0

我沒有嘗試過上面給出的,但是我可以在星期一。然而,你不是說因爲我通過代碼添加控件 - 動態地說JQuery將無法選擇文本框ID嗎?如果是這樣,我如何在沒有JQuery和AJAX的情況下應用mask? – Andy5 2010-12-04 15:35:05

+0

@ Andy5:正如我的答案ID中所說,由於它們是根據命名容器層次結構中的位置生成的,因此很難理解。你應該能夠通過css類名而不是id來使用jQuery來獲取元素。 – skajfes 2010-12-04 19:20:48

0
jQuery(function() { 
    jQuery('.dateMask').mask("99/99/9999"); 
}); 

應該工作。

我真的不知道什麼你的意思:

tell JQuery not to include the "#" when finding the control

當您在選擇使用#這意味着找到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加載控件比你要運行的JavaScript代碼每次ajax請求完成時都會發生。你可以做,通過對在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 
    ... 
}