2009-05-20 22 views
1

IDを持つhtmlコントロールとしてレンダリングするカスタムASP.NETコントロールがある場合、jQueryを使用して入力コントロールに属性を追加しようとしています。jQueryとASP.NETコントロールの問題

しかし、私はいくつかの問題に実行しているよ。まず

を、私のjQueryのは、それを選択することができません。

私がこれまで持っている:

$(document).ready(function() { 
    $(client id of the input control).attr('onclick', function() { alert('hey!'); }); 
}); 

jQueryの入力コントロールを見つけようとしたができませんされているかのように思え。

アイデア?

UPDATE:

通常、提示のソリューションは、動作しますが、これは、SharePoint公開.aspxのページであるため、コードブロックは、他の回避策を試みる...許可されていません。

+0

.attrコマンドとは対照的にクリックイベントハンドラに.clickまたは.bind( 'click'、...)を使用すると便利です。 –

答えて

0

ASP.NETコントロールはマスターページまたはユーザーコントロールにありますか? ASP.NETは、一意であることを確認するためにIDの束の前にIDを付けます。

HTMLのように出力されるコントロールのIDは何ですか?

+0

私はコントロールを最初にレンダリングしています。 IDとそれを取得します。 –

2

入力コントロールのIDとしてはどのようなものを使用しますか?

IDのコントロールではなく、コントロールのClientIDを使用する必要があります。

+0

はい、これはクライアント側であるため、私はClientIDにアクセスできません。したがって、今のところ、私はコントロールをレンダリングしてからClientIDをハードコードしています。 –

+0

うん、あなたはそれを回避する必要があります。 ClientScriptManagerを使用して、起動時に実行するjavascriptを追加することができます(RegisterStartupScriptメソッドを使用)。 – mbillard

0

あなたはASP.NETコントロールに与えられたIDにレンダリングされたHTMLコントロールのIDを設定している場合は、ASP.NETコントロールのID名前空間をどのように扱うかを認識する必要があります。基本的に、コントロール内にネストされた各コントロールは、常に一意の識別子を保証する必要があります。 ASP.NETは、コントロールに割り当てられたIDを取得し、そのコントロールを含むすべてのコントロールのIDを先頭に付けることでこれを維持します。したがって、ページ上のコントロールには、ページ自体のフォームに行くIDの文字列が含まれます。

このクライアントサイドを再構築する必要はありません。代わりに、ControlはClientIDを定義します.ClientIDは、クライアントでレンダリングされたコントロールのIDを返します。これをjQueryに埋め込むか、別のスクリプトファイルにjQueryを入れている場合はjQueryが見ることができるjavascript変数に入れてください)、うまくいくはずです。

5

jQueryでクリックイベントを接続するだけです。

$(document).ready(function() { 
    $(id of the input control)click(function() { 
     alert('hey!'); 
    }); 
}); 

また、入力したIDをjQueryのコントロールに入力するだけではないことを確認してください。 ASP.Netは、あなたがコントロールを与えたよりもはるかに異なるIDでコントロールをレンダリングします。私が実行してサイトの一つで、私は次のボタンがあります。

<asp:Button ID="btnSignup" runat="server" Text="Sign Up" /> 

レンダリングされたHTMLでIDがbtnSignupではない、それは実際にctl00_cpLeft_btnSignupとしてレンダリングします。jQueryを使ってそのコントロールを選択するには、この操作を行うことができます。

$("input[id$='btnSignup'").click(function() { ... }); 

編集:

$("#<%= btnSignup.ClientID %>").click(function() { ... }); 

編集:

私をあなたはまた、使用して選択することができます

$("input[id$='btnSignup'}").click(function() { ... }); 

<%= ...%>メソッドを使用してみると、あなたのjavascriptをに入れて ASPX/ASCXファイル自体が動作するようにしてください。このため、私は正規表現の方法に固執します。

+1

属性マッチングセレクタの使用については考えていません。 +1の代わりにそのために<%= Button1.ClientID%> –

+0

私は実際にどちらが速いかを見るために2つの方法との比較を実行したい。 – Gromer

+0

Gromer、まだ最初の方法でそれを選択することはできません:( $( "input [id $ = 'btnSignup'")]クリック(function(){...}); –

0

はちょうどあなたに知らせるために、document.ready部分はidがその後、期待されているもの、CT100 ....が最初にスローされる別のものに変更されasp.netコントロールを使用して、を必要とされていませんasp.netは、指定されたテキストで終わるIDを持つすべての要素(*)を検索するので、最初にマージされたコードをスローしますが、この方法では実際のID名が検索されます。

$(function() { 
    $("*[id$='idofcontrol']".click(function() { alert('hey!'); }); 
}); 

またはビューのソースに移動し、id名をコピーして、あなたのコードに貼り付けたり、単にようにCSSクラスセレクタを使用します。あなたは、そのクライアントIDを使用する必要が

$(function() { 
     $('.myclassname').click(function() { alert('hey!'); }); 
}); 
2

。あなたのASP.NETマークアップは次のようになります場合:

<uc:MyControl runat="server" ID="myControl1" /> 

あなたのjQueryのセレクタは次のようになります。

$(document).ready(function() { 
    $("<%=myControl1.ClientID%>").attr('onclick', function() { alert('hey!'); }); 
}); 
0

は、SharePointを述べているので、あなたがjQuery with Sharepointの統合に焦点を当ててEndUserSharepointにこのシリーズに興味があるかもしれません。著者は、webパーツを操作するためのjQueryの入手について説明します。

関連する問題