4

カレンダーから日付を選択するユーザー コントロールを 1 つ作成しました。jquery プラグインを使用して作成しました。私の問題は、ユーザー コントロールを aspx ページに配置すると、正しく機能しないことです。つまり、1 つのコントロールのみが 2 回動作すると、エラーが発生します..では、何が問題になるのでしょうか??

コードビハインドファイルからjqueryを登録するために書いたコード

 string jquery = string.Empty;
    jquery = "window.addEvent('domready', function () { new CalendarEightysix('exampleIII', { 'excludedWeekdays': [0, 6], 'toggler': 'imgClick', 'offsetY': -4 });});   ";


    Page.ClientScript.RegisterStartupScript(typeof(Page), "a key", "<script type=\"text/javascript\">" + jquery + "</script>");

ユーザー制御コード。

<script src="JS/mootools-1.2.4-core.js" type="text/javascript"></script>
<script src="JS/mootools-1.2.4.4-more.js" type="text/javascript"></script>
<script src="JS/calendar.js" type="text/javascript"></script>
<link href="CSS/calendar.css" rel="stylesheet" type="text/css" />

<table cellpadding="0">
  <tr>
    <th>
      <asp:Label ID="lblHeading" runat="server" Text="Date"></asp:Label>
    </th>
    <td>
      <input id="exampleIII" name="dateIII" readonly="readonly" type="text" maxlength="10"
        style="padding-right: 15px;" />
      <img src="Images/calendar.gif" alt="" id="imgClick" />
    </td>
  </tr>
</table>

これについてのアイデアは、私を助けてください。前もって感謝します。

4

3 に答える 3

4

コントロールに動的コントロールIDを配置していないか、動的JavaScriptを初期化していないため、問題は確かです。複数のユーザーコントロールの読み込みで ID を変更しないと、javascript を使用しようとすると競合が発生します。

動的 ID を作成するClientIDには、同じコントロールの属性を使用できます。

コードでは、動的な変更を行う必要があるポイントは、最初に単純な html コントロールとして選択した入力であり、ID の最後に次のように現在の UserControl ID を追加します。

<input id="exampleIII<%=ClientID%>" name="dateIII<%=ClientID%>" readonly="readonly"

そして

<img src="Images/calendar.gif" alt="" id="imgClick<%=ClientID%>" />

次に、JavaScript を次のように変更します。

 string jquery = string.Empty;
    jquery = "window.addEvent('domready', function () { new CalendarEightysix('exampleIII"+ ClientID + "', { 'excludedWeekdays': [0, 6], 'toggler': 'imgClick"+ ClientID + "', 'offsetY': -4 });});   ";

    Page.ClientScript.RegisterStartupScript(typeof(Page), "akey"+ClientID, "<script type=\"text/javascript\">" + jquery + "</script>");

おそらくマスターページにある共通のjavascriptライブラリのみをロードするか、Page.ClientScript.RegisterStartupScript

ps: を使用しid="exampleIII<%=ClientID%>"てコントロールをレンダリングしますClientID。したがって、ClientID と exampleIII の両方を含む最終的な名前を取得します。

<%= %>別の方法は、UpdatePanels に問題があるため、ボタンを asp.net コントロールにすることです。それらをasp.netコントロールにControlName.CliendIDすると、javascript initで使用できるようになります

于 2012-07-09T12:52:31.243 に答える
0

この IDexampleIIIを JavaScript コードで使用することはできません。入力タグの代わりにテキストボックスを使用してください。

そこで asp.net を使用する必要がありますClientID

コントロールを次のように変更します。

<asp:TextBox ID="exampleIII" runat="server"></asp:TextBox>
<asp:LinkButton ID="imgClick" runat="server"></asp:LinkButton>

このようなもの:

jquery = "window.addEvent('domready', function () { new CalendarEightysix('" + exampleIII.ClientID + "', { 'excludedWeekdays': [0, 6], 'toggler': '" + imgClick.ClientID + "', 'offsetY': -4 });});   ";


Page.ClientScript.RegisterStartupScript(typeof(Page), "a key", "<script type=\"text/javascript\">" + jquery + "</script>");

参照: ClientID

Web サーバー コントロールが HTML 要素としてレンダリングされると、HTML 要素の id 属性が ClientID プロパティの値に設定されます。ClientID 値は、document.getElementById メソッドを使用してクライアント スクリプト内の HTML 要素にアクセスするためによく使用されます。

于 2012-07-09T12:51:35.747 に答える
0

ページに複数の UserControls が含まれている場合のクライアント側の問題の一般的な理由は、固定 ID を持つ HTML マークアップの使用です。これにより、UserControl を複数回含めると、要素の ID が重複します。

コードを見なければ、より正確なことはできません。

于 2012-07-09T12:46:03.997 に答える