3

単に、client-clickイベントに対して1つのtextBox'txtPersonId'のクライアントIDを渡そうとしているので、そのtextBoxコントロールに移動して、そのjQueryラッパーをloadePerson()関数に渡すことができます。

これは、aspxマークアップでデカールする方法です。

<asp:Button ID="btnSearch" runat="server" Text="ARA" OnClientClick="loadPerson(jQuery('#<%=txtPersonId.ClientID %>'))"/>

しかし、私がそれをレンダリングすると、

<%=txtPersonId.ClientID %>

プレースホルダーはそのままで、レンダリングされたコントロールのクライアントIDに置き換えられません。

なぜこれが起こるのか、そしてどのようにそれを克服する必要があるのか​​、何か考えはありますか?

4

2 に答える 2

4

このような問題が発生したとき、式全体を括弧で囲み、結果を文字列として構築することに頼りました。これは、文字列プロパティ内に埋め込まれたレンダー ブロックの構文をパーサーが認識しないためだと思います。

 <asp:Button ID="btnSearch" runat="server" Text="ARA"
      OnClientClick='<%= "loadPerson(jQuery(\"#" + txtPersonId.ClientID + "\"))" %>' />

私はずっと前から、JavaScript をマークアップから完全に切り離すようにしてきたので、正確な詳細については少し曖昧かもしれません。JavaScript をマークアップから分離したい場合は、スクリプト ブロックに明示的または相対 DOM 参照を使用してハンドラーを追加できます。ID で一致する「ends with」セレクターを使用すると、明示的な ID を検索する必要がなくなりますが、それを行うこともできます。以下の例では、両方のスタイルを示しています。

 <script type="text/javascript">
      $(function() {
          $('#' + '<%= btnSearch.ClientID %>').click( function() {
                loadPerson( $('input[id$=txtPersonId]') );
          });
      });
 </script>
于 2010-06-19T22:53:47.613 に答える
0

LoadPerson が何をするのかわかりませんが、Jquery でクリック イベントの関数を書きたい場合は、次のようなものを作成できます。

'#'+ '<%=txtPersonId.ClientID %>' で txtbox ID をアドレス指定すると、ボタンに対して同じことができます $('#' + '<%=btnSearch.ClientID%>').click(function() {//クリックイベント処理});

于 2010-06-19T22:43:14.277 に答える