我对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('<%=variableDDL.ClientID%>');"
生成
<%=variableDDL.ClientID%>
onclick="iButtonClick(<%=variableDDL.ClientID%>);"
生成
'<%#variableDDL.ClientID%>'
onclick="iButtonClick('<%#variableDDL.ClientID%>');"
生成
<%#variableDDL.ClientID%>
答案 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);
});
更新:纯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
答案 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);"