我将Listbox定义为:
<asp:ListBox ID="lst_Agenda" onchange="drawChart()" OnSelectedIndexChanged="lst_Agenda_SelectedIndexChanged" SelectionMode="Multiple" CssClass="txt12 myListBox" AutoPostBack="true" DataTextField="Name" runat="server" Width="100%" Height="100%" />
在我们选择了一些项目之后,会调用 lst_Agenda_SelectedIndexChanged 代码隐藏方法,该方法调用其他一些ListBoxes以级联方式填充。 Javascript中有一个名为 drawChart 的函数,它根据在所有这些ListBox中选择的值生成图表。
因此我希望在列表框上的javascript函数调用更改事件之前调用codebehind函数。但目前恰好相反,Javascript函数drawChart首先被调用而不填充列表框中的值。
我尝试使用以下代码直接从codebehind方法调用Javascript函数:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "myscript", "drawChart()", true);
但是使用它会为任何&#39; document.getElementById&#39;提供空值。调用
Codebehind Function和JS调用如下:
protected void lst_Agenda_SelectedIndexChanged(object sender, EventArgs e)
{
lst_Agenda_Changed();
foreach (ListItem li in lst_SubAgenda.Items)
li.Selected = true;
foreach (ListItem li in lst_Doctors.Items)
li.Selected = true;
lst_SubAgenda_Changed();
lst_Group_Changed();
//ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "myscript", "drawChart()", true);
}
drawChart的Javascript如下:
function drawChart() {
var tempDateToWeek = "";
var tempDateToYear = "";
var DateOfWeek = new Date();
tempDateToWeek = document.getElementById('txtRangeTo').value.substring(0, 2);
tempDateToYear = document.getElementById('txtRangeTo').value.substring(6, 10);
...........
我在drawChart中遇到错误,如果我从codebehind那里调用它,那里我用document.getElementById(&#39; txtRangeTo&#39;)填充变量tempDateToWeek。
那我怎么能实现这个目标呢?
答案 0 :(得分:0)
为什么不尝试删除onchange =&#34; drawChart()&#34;来自asp Control。
答案 1 :(得分:0)
希望这会对你有所帮助。
//your code here
string script = "window.onload = function() { drawChart(); };";
ScriptManager.RegisterClientScriptBlock(this, this.Page.GetType(), "drawChart", script,true);
并且
tempDateToWeek = document.getElementById("<%=txtRangeTo.ClientID %>").value.substring(0, 2);
答案 2 :(得分:0)
您应该在代码隐藏中的事件处理程序中调用RegisterStartupScript
而不是RegisterClientScriptBlock
。一旦页面在回发后加载,它将导致Javascript代码被执行,因此可以使用document.getElementById
访问DOM元素。
protected void lst_Agenda_SelectedIndexChanged(object sender, EventArgs e)
{
lst_Agenda_Changed();
foreach (ListItem li in lst_SubAgenda.Items)
li.Selected = true;
foreach (ListItem li in lst_Doctors.Items)
li.Selected = true;
lst_SubAgenda_Changed();
lst_Group_Changed();
ScriptManager.RegisterStartupScript(this, GetType(), "DrawChart", "drawChart();", true);
}
还应该从DropDownList中删除onchange
事件处理程序,以避免在回发之前调用客户端代码。