传递id并在javascript中查找元素

时间:2013-01-08 21:21:44

标签: c# javascript asp.net

我对JavaScript非常陌生并且对此感到难过。我正在尝试将ClientID的{​​{1}}发送到js函数。然后该函数应找到该元素并获取Control值。需要注意的是:我正在使用母版页,Control's我传递的Control位于ClientID

ASP:

UserControl

的.js:

//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

每次点击按钮,都没有任何反应。将发送的参数更改为function iButtonClick(ClientID) { var v = document.getElementById(ClientID); var val = v.value; alert(val); } 会做同样的事情。将其更改为<%#variableDDL.ClientID%>'<%=variableDDL.ClientID%>'会出现空指针错误,因为它无法找到该对象。该脚本被正确引用,如果我将其更改为不接受参数并仅生成警报,则会触发该脚本。谁知道我做错了什么?

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

ASP UserControl:

'<%#variableDDL.ClientID%>'

呈现OnClick HTML: 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(); } } 生成

'<%=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%>

3 个答案:

答案 0 :(得分:2)

从表面上看,

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

正在逐字渲染 - 它不会替换尖括号的内容。

尝试

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

请注意属性的单引号 - 我认为 会产生差异 - 而双引号则会使结果成为JavaScript字符串文字。

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

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

在您的代码隐藏事件中。

答案 1 :(得分:1)

如果您不反对jQuery,您可以通过向select元素添加标识类来轻松执行此操作,因为它获得唯一的客户端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);

});

Click here to view the fiddle

更新:纯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

Here is the JS Only Fiddle

答案 2 :(得分:0)

这就是ASP.Net的工作原理:你不能在ASP.Net WebControls中使用servercode(&lt; %%&gt;)。

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

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

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

OnClientClick="ButtonClick(this);"