2010-12-04 30 views
0

私はJQueryの日付マスクを持っていますが、ページを実行すると "Microsoft JScriptランタイムエラー:オブジェクトがこのプロパティまたはメソッドをサポートしていません"というエラーが発生します。JQueryプラグインが動作しない

この特定のJQueryが動作するようになっているコントロールは、リピータコントロールに動的に追加されました。これにより、コントロールのIDを調べました。コントロールのIDは、Visual Studioで中断して停止していて、aspxページに表示されています。 idは、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> 

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

答えて

0

は、使用してみましたがあります

$(ドキュメント).ready(関数(){。 $(dateMask).mask( "99/99/9999を"); });

usercontrolを動的に追加しても、追加されたコントロールのcssクラスは変更されません。追加されたコントロールの名前は、その名前付けコンテナに基づいてIDが変更されます。

+0

私はあなたが上で与えたことを試していないが、月曜日にすることができます。しかし、JQueryがテキストボックスIDを選択できないようにするために、コントロールをコードの背後に追加しているので、あなたはそれを言いませんでしたか?もしそうなら、JQueryとAJAXなしでマスクを適用するには? – Andy5

+0

@ Andy5:私の答えでは、IDの命名コンテナの階層内の位置に基づいて生成されるので、IDの把握が難しいと言われています。 idの代わりにcssクラス名でjQueryを使用して要素を取得できるはずです。 – skajfes

+0

こんにちは まあ、私は次のコードを適用し、いくつかのより多くを追加しました:。 $(ドキュメント).ready(){ $( 'dateMask')マスク( "99/99/9999"); }); JQueryがコントロールのIDを取得していることを確認するために、$( 'input [class $ = dateMask]')を追加し、出力をアラートボックスに送りました。ありがたいことに、JQueryはクラスごとにコントロールを見つけましたが、マスクを適用すると落ちました。だから、問題はプラグインにあります!私はアイデアがきれいで、なぜそうはしません! – Andy5

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

が有効です。

私はあなたが何を意味するか本当にわからない:あなたはそれがIDによる制御を見つける意味セレクタに#を使用する場合

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

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 
    ... 
}); 

あなたはjavascriptのコードを実行するために持っているよりも、あなたは、Ajaxを使用してコントロールをロードする場合ajaxリクエストが完了するたびに上に戻ります。ページ上のJavaScript関数)

public void Page_Load(object sender, EventArgs e) { 
    ScriptManager.RegisterStartupScript(updatePanel, updatePanel.GetType(), "mask", "initMask();", true); 
} 

あなたはinitMaskを(定義する必要があります:あなたはこのようPage_Loadの中でのScriptManagerでスクリプトを登録することによってそれを行うことができます。

function initMask() { 
    jQuery('.dateMask').mask("99/99/9999"); 
    jQuery('.phoneMask').mask("(999) 999-9999"); // if you have one 
    ... 
} 
+0

テキストボックスがプレースホルダに動的に読み込まれるusercontrolの一部であるため、書き込まれたようには機能しません。したがって、 'date'は見つからないので、そのコントロールのクライアントIDはレンダリングされません。 – FiveTools

+0

@FiveTools:あなたは動的にどういう意味ですか?アヤックス?あなたはあなたの答えに同じコード例を与えましたが、あなたには構文エラーがあります。 – skajfes

+0

これは、JQueryやAJAXに依存しないデータマスクを適用する別の方法ですか?私はJQueryの前にAJAXを試しましたが、動的コントロールの他のコンフリクトのためにドロップしました – Andy5