1

我对 JavaScript 非常陌生,对此我感到很困惑。我正在尝试将ClientIDa发送Control到 js 函数。然后该函数应该找到元素并获取Control's值。注意:我正在使用母版页,并且Control我正在传递的ClientIDUserControl.

ASP:

//code here

<asp:TableCell runat="server">
    <asp:DropDownList runat="server" ID="variableDDL"/>
    //some ListItems
</asp:Tablecell>

//more cells here

<asp:TableCell runat="server">
    <asp:ImageButton runat="server" ID="iButton" ImageUrl="~/Images/iButton.png" OnClientClick="iButtonClick(<%=variableDDL.ClientID%>);"/>
</asp:TableCell>

//code here

.js:

function iButtonClick(ClientID)
{
    var v = document.getElementById(ClientID);
    var val = v.value;
    alert(val);
}

每次我点击按钮,什么都没有发生。将发送的参数更改为<%#variableDDL.ClientID%>做同样的事情。将其更改为'<%=variableDDL.ClientID%>''<%#variableDDL.ClientID%>'给出空指针错误,因为它找不到对象。该脚本被正确引用,如果我将其更改为不接受参数并仅产生警报,它就会触发。有人知道我在做什么错吗?

编辑:请求的代码如下所示。

ASP 用户控件:

protected void Page_Init(object sender, EventArgs e) {
    DataTable fields = (DataTable) Session["fields"];
    for(int i = 0; i < fields.Rows.Count; i++)
    {
        variableDDL.Items.Add(new ListItem(fields.Rows[i]["Field"].ToString(), fields.Rows[i]["Field"].ToString();
    }
}

渲染的 OnClick HTML: '<%=variableDDL.ClientID%>'产生

onclick="iButtonClick(&#39;&lt;%=variableDDL.ClientID%>&#39;);"

<%=variableDDL.ClientID%>生产

onclick="iButtonClick(&lt;%=variableDDL.ClientID%>);"

'<%#variableDDL.ClientID%>'生产

onclick="iButtonClick(&#39;&lt;%#variableDDL.ClientID%>&#39;);"

<%#variableDDL.ClientID%>生产

onclick="iButtonClick(&lt;%#variableDDL.ClientID%>);"
4

3 回答 3

2

看样子,

OnClientClick="iButtonClick(<%=variableDDL.ClientID%>);"

正在逐字呈现 - 它没有替换尖括号的内容。

尝试

OnClientClick='iButtonClick("<%=variableDDL.ClientID%>");'

请注意属性的单引号 - 我认为这确实会有所不同 - 以及双引号,因此结果变成了 JavaScript 字符串文字。

如果这不起作用,您可能需要设置

iButton.OnClientClick = "iButtonClick('" + variableDDl.ClientID + "');";

在您的代码隐藏事件中。

于 2013-01-09T13:50:51.850 回答
1

如果您不反对 jQuery,您可以通过向您的选择元素添加一个标识类来轻松执行此操作,因为它获得了一个唯一的客户端 ID。

<select id="variableDDL" class='varddl'>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
</select>
<button id="btn1" type="button">Click here</click>


$("#btn1").click(function(e){
  var v = $(".varddl:first-child").val();
  alert('Value of '+ $(".varddl:first-child").attr('id') + 'is ' + v);

});

点击这里查看小提琴

更新:纯 JS 版本

function btnClick(e){
   //Select the first occurance, [0]
   var ele = document.getElementsByClassName('varddl')[0];
      if(ele){
         //There's the value
         var val = ele.value;
         alert(val);
      }
}
var btn1 = document.getElementById("btn1");
btn1.onclick = btnClick

;

这是 JS Only Fiddle

于 2013-01-08T21:29:13.197 回答
0

这就是 ASP.Net 的工作方式:您不能在 ASP.Net WebControls 中使用服务器代码 (<%%>)。

您可以通过将 ClientID 直接放在 javascript 代码中来解决此问题:

function iButtonClick()
{
    var v = document.getElementById('<%= variableDDL.ClientID %>');
    var val = v.value;
    alert(val);
}

您也可以直接在 OnClientClick 中传递对象,但限制是您只能发送对象本身:

OnClientClick="ButtonClick(this);"
于 2013-01-09T13:52:44.100 回答