调用javascript函数时出现“对象预期”错误

时间:2011-02-23 14:19:56

标签: c# javascript drop-down-menu onchange

我想根据下拉列表中选择的值更改文本框的可见性。

我创建了这样的函数:

function ShowGiftCardSource() {
        var ddlGiftCardSource = document.getElementById('<%=ddlGiftCardSource.ClientID%>');
        var txtGiftCardSource = document.getElementById('<%=txtGiftCardSource.ClientID%>');

        if (ddlGiftCardSource.value == "Other") {
            txtGiftCardSource.style.visibility = "visible";
            txtGiftCardSource.focus();
        }
    }

在CS页面中:

ddlGiftCardSource.Attributes.Add("onChange", "OnSelectedIndexChanged();"); 

并在控件中:

<asp:DropDownList ID="ddlGiftCardSource" runat="server" Width="151px" onChange="ShowGiftCardSource();">

但我收到以下错误:

Microsoft JScript runtime error: Object expected

有人可以帮我解决一下吗?

2 个答案:

答案 0 :(得分:1)

也许那是因为你在onChange处理程序中使用了ShowGiftCardOccasion()方法,但你的方法名是ShowGiftCardSource()?然后javascript就找不到正确名称的方法。

答案 1 :(得分:1)

将后面的代码更改为:

ddlGiftCardSource.Attributes.Add("onChange", "ShowGiftCardSource();");

从标记中删除onchange

<asp:DropDownList ID="ddlGiftCardOccasion" runat="server" Width="151px">

标记中的onchange是要调用的服务器端方法。

编辑:如果你已经有服务器端方法,你必须首先将AutoPostBack添加到下拉菜单然后在服务器端onchange事件显示文本框:

<asp:DropDownList ID="ddlGiftCardOccasion" runat="server" Width="151px" OnChange="ShowGiftCardSource" AutoPostBack="True">

在你的C#代码后面:

void ShowGiftCardSource(object sender, EventArgs e) {
  //code.....
  txtGiftCardSource.Visible = true;
}

当然,摆脱ddlGiftCardSource.Attributes.Add行。