2010-12-03 9 views
0

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

この特定のJQueryが動作するようになっているコントロールは、リピータコントロールに動的に追加されました。これにより、コントロールのIDを調べました。コントロールのIDは、Visual Studioで中断して停止していて、aspxページに表示されています。 idは、JQueryが最初に持っていた「#」を除いて同じですが、ページ上にはありません。私は私のjQueryのコードで

jQueryの(関数($){

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

})。

JQueryにコントロールを見つけるときに "#"を含めないように指示するのはありますか?私はUniqueIDを使用しましたが、これはアンダースコアを "$"に変更します。これはページ上のものと同じではありません。私の唯一の問題は、IDの先頭に "#"記号が付いていることです。

誰でも手助けできますか?

ありがとうございました

+0

ハッシュは、jqueryがid属性を持つhtml要素を探していることをjqueryに知らせるためにjqueryによって使用されます。例えば – Andrew

答えて

1

多分あなたはマスクライブラリを含めるのを忘れていました。その後、

<script src="jquery.maskedinput.js" type="text/javascript"></script> 

制御のために物事を簡単あなたが(クラス=「datemasked」)クラスを追加することができようにするにしてそれを動作させるために、次の使用:あなたのコードを分割するようにしてください

$('.datemasked').mask("99/99/9999"); 

}); 
+0

マスクライブラリは、テキストボックスと同じユーザーコントロール上にあります。 – Andy5

+0

私はコントロールにクラスを追加することによって何を意味するか分かりません。これはコントロールにどこに追加されますか? – Andy5

+0

テキストボックスにCssClassを追加することができます: Willem

0

をし、 Firebugを使ってデバッグしてください。 あなたが書く場合:その後、

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

そしてコードをステップ要素が発見された場合、あなたは少なくとも見ることができます。また、オブジェクト上で利用可能なすべてのメソッドをリストして、マスク機能が使用可能であることを確認することもできます。

Ivesが述べたように、ライブラリが含まれていることを確認してください。

編集: あなたの主な問題は、C#とJavaScriptを混在させていることです。 <%date.ClientID%>はC#でのみ意味があるので、JavaScriptを設定する関数にパラメータとして送信する必要があります。

より良い解決策は、Ivesによって記述されているように、要素でCssClassを使用し、jQueryセレクタで$( '。classname')を使用することです。これは、要素のインスタンスが1つしかないことを前提としていますが、これはあなたの場合ではない可能性があります。

+0

制限付き開発環境のためFirebugを使用できません。ライブラリはユーザコントロールに含まれています。それはそこにある。 "#"のためにIDが異なる – Andy5

+0

既に説明したように、#は名前の一部ではありません。それはidで要素を見つけるためのjQuery構文です。 #は名前の一部として解釈されません。要素のチェックを行い、nullの場合は警告()を与えます。 –

+0

さて、アラートを追加しました(document.getElementById( "date"));ページが読み込まれると、オブジェクトではなくヌルが表示されます。したがって、コントロールがありません。これをどうやって解決するのですか? – Andy5

2
<asp:TextBox ID="date" runat="server"></asp:TextBox> 
<script type="text/javascript"> 
    alert($('#<%=date.ClientID %>').attr('id')); 
</script> 

このコードは正しいIDを警告するので、 '#'は問題ではありません。 mask()が有効な関数であるかどうか、およびテキストボックスがページ上にある前にコードが実行されているかどうかを確認します。試してみてください:

$(document).ready(function(){$('#<%=date.ClientID %>').mask("99/99/9999");}) 

注:<%= ServerSideCode %>ブロックはaspxページ上にある必要があり、それは.jsファイルでは動作しません!

または、Ivesが提案するようにクラス名を追加することができます。サーバーサイドコードは必要ありません。

関連する問題