0

質問を可能な限り最善の方法で表現したかどうかわからないので、コード例を示します。

同じJavaScript関数を使用するページが複数あります。その関数をすべてのページに追加する代わりに、.jsに追加して、サイトマスターにインポートしました。その関数を呼び出すハンドラーをオブジェクトに追加するにはどうすればよいですか。私が持っている方法では機能していないようです。

編集:問題が発生していることがわかりました

document.getElementById('<%= PostBackButton.ClientID %>').click();

javascript関数は正しく呼び出され、ページにはPostBackButton aspボタンがありますが、getelementはnullを返します。

//chart-ajaxDateSelection.js
function dateSelectionChanged(sender, args) {
  selectedDate = sender.get_selectedDate();

  document.getElementById('<%= PostBackButton.ClientID %>').click();
}

function getSlide()
{
  var i,x,y,ARRcookies=document.cookie.split(";");
  for (i=0;i<ARRcookies.length;i++)
  {
    x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
    y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
    x=x.replace(/^\s+|\s+$/g,"");
    if (x=="slide")
    {
      return y;
    }
  }
}

私のハンドラー:

<asp:TextBox ID="OverviewChartStartDateTextBox" runat="server"></asp:TextBox>
<ajaxToolkit:CalendarExtender ID="OverviewChartStartCal" 
  OnClientDateSelectionChanged="dateSelectionChanged" runat="server" 
  TargetControlID="OverviewChartStartDateTextBox">
</ajaxToolkit:CalendarExtender>

ご覧のとおり、ajaxカレンダーで選択した日付が変更されたときに、dateSelectionChangedメソッドを呼び出そうとしています。

4

2 に答える 2

1

Javascriptファイルが正しく含まれていないようです。テストとして、<script>タグ内のページ自体の内部に関数を含めてください:

<script>
    function dateSelectionChanged(sender, args) {
        selectedDate = sender.get_selectedDate();  
        document.getElementById('<%= PostBackButton.ClientID %>').click();
    }
</script>

日付変更イベントをテストし、機能する場合は、スクリプト ファイルが正しく含まれていないことがわかります。

それでも機能しない場合は、スクリプトにエラーがある可能性があります。OnClientDateSelectionChangedカレンダー エクステンダーのイベントには引数がありますか?

おそらく送信者はnullで、スクリプトがボタン クリック イベントに到達する前にエラーが発生しています。

于 2012-08-28T15:13:41.210 に答える
0

参考までに、.net >= 3.5 をお持ちの場合は、コントロールの ClientIDMode を static に設定し、document.getElementById("controlId"); でコントロールにアクセスできます。このように <% %> タグを使用する必要はありません


<asp:TextBox ID="tb_companyEmail" ClientIDMode="Static" runat="server" CssClass="input"
                                    type="email" />


document.getElementById("tb_companyEmail");
于 2012-08-28T16:38:40.780 に答える