如何在selectIndexChanged选择元素上调用javascript函数

时间:2009-08-04 14:02:24

标签: c# asp.net html-select

我在ASP.NET中使用C#

我有一个HTMLSelect元素,当我更改select的索引时,我正在尝试调用javascript函数。

riskFrequencyDropDown是在C#代码后面动态创建的:

 riskFrequencyDropDown.Attributes.Add("onchange", "updateRiskFrequencyOfPointOnMap(" + riskFrequencyDropDown.ID.Substring(8) + "," + riskFrequencyDropDown.SelectedValue +");");

但它不会调用我页面上的javascript函数。当我删除参数它工作正常,但我需要传递这些参数,以确保正常的功能。

非常感谢对此问题的任何见解

4 个答案:

答案 0 :(得分:4)

您的参数是数字还是字母数字?如果它们包含字母,您需要在javascript中引用它们。请注意下面添加单引号。

riskFrequencyDropDown.Attributes.Add("onchange",
             "updateRiskFrequencyOfPointOnMap('"
                  + riskFrequencyDropDown.ID.Substring(8)
                  + "','"
                  + riskFrequencyDropDown.SelectedValue +"');");

答案 1 :(得分:0)

tvanfosson的回复回答了你的问题。另一个需要考虑的选择(可能会让你不再受此影响):

在C#中创作更简单的javascript:

riskFrequencyDropDown.Attributes.Add("onchange",
             "updateRiskFrequencyOfPointOnMap(this);");

然后,在javascript函数本身(在onchange上调用)中,从dropDown对象中获取所需的值

function updateRiskFrequencyOfPointOnMap(dropDown) {
    var riskFrequencyId = dropDown.ID.Substring(8);
    var riskFrequencyValue = dropDown.SelectedValue;
    // etc
}

这个设计的一个不太明显的好处:如果你改变了使用下拉对象的方式(可能是子串(6)和子串(8)),你不必改变你的C# - 你只有更改您的JavaScript(并且只在一个地方)。

答案 2 :(得分:0)

我会建议使用string.Format和单引号

riskFrequencyDropDown.Attributes.Add("onchange",string.Format("updateRiskFrequencyOfPointOnMap('{0}','{1}');",riskFrequencyDropDown.ID.Substring(8),riskFrequencyDropDown.SelectedValue )); 

答案 3 :(得分:0)

我建议使用Lance的答案。这是因为在调用attribute.add时调用所选值将意味着onchange将使用所选值。

让我们说ddl包含(“One”,“Two”,“Three”)和默认选择“One”。每次调用ddl onchange时,updateRiskFrequencyOfPointOnMap选择值参数将包含“One”(即使选择“Three”)。

如果那是您的预期动作,那就是对所选值做一些事情。