将处理程序添加到调用全局javascript函数的对象

时间:2012-08-28 14:38:53

标签: c# javascript asp.net

我不确定我是否以最佳方式提出问题所以我将展示我的代码示例。

我有多个页面使用相同的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方法。

2 个答案:

答案 0 :(得分:1)

听起来Javascript文件没有被正确包含。作为测试,请在<script>标记中包含页面内部的功能:

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

测试更改日期的事件,如果有效,则表示您的脚本文件未正确包含。

如果仍然无效,脚本可能会出错。日历扩展程序的OnClientDateSelectionChanged事件是否有参数?

也许发件人是null,并且脚本在进入按钮点击事件之前就出错了。

答案 1 :(得分:0)

如果你有.net&gt; = 3.5,你可以将你的控件ClientIDMode设置为静态,并使用document.getElementById(“controlId”)访问控件;这样您就不必使用&lt; %%&gt;标签


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


document.getElementById("tb_companyEmail");