我正在尝试将选定的文本(不是值)从DropDownList放入TextBox中。 DropDownList位于FormView控件的EditITemTemplate中,但TextBox不在。
这是我要使用的js:
<script type="text/javascript">
function GetDdlText() {
var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
if (fvmode == "Edit") {
var ddl = document.getElementById('<%=fvPhaudDets.FindControl("QOpClsCallDdl")%>');
var txt = document.getElementById("txtbox");
var selectedText = ddl.options[ddl.selectedIndex].Value;
txt.Text = selectedText;
txt.focus();
}
}
</script>
这是OnSelectedIndexChanged事件,我在其中调用js:
protected void QOpClsCallTextBox_OnSelectedIndexChanged(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "TheTxt", "GetDdlText();", true);
}
因此,只要在DropDownList中选择了一个新值,选定的文本就应该填充到TextBox中,但是没有值会输入到TextBox中。我缺少什么,或者需要更改什么才能捕获选定的值?
答案 0 :(得分:1)
以下代码段应该起作用。您的JavaScript代码存在一些问题。主要是使用大写字母以及Webforms和javascript函数的混合。
首先,要找到DDL,您需要ClientID
fvPhaudDets.FindControl("QOpClsCallDdl").ClientID
然后使用正确的JavaScript ddl.options[ddl.selectedIndex].text
,而不是.Value
设置文本框文本也是如此。是txt.value = selectedText;
,而不是txt.Text
。
<script type="text/javascript">
function GetDdlText() {
var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
if (fvmode == "Edit") {
var ddl = document.getElementById('<%= fvPhaudDets.FindControl("QOpClsCallDdl").ClientID %>');
var txt = document.getElementById("txtbox");
var selectedText = ddl.options[ddl.selectedIndex].text;
txt.value = selectedText;
txt.focus();
}
}
</script>
更新
要检查FormView是否处于编辑模式,请使用此行
var ddl = document.getElementById('<%= fvPhaudDets.CurrentMode == FormViewMode.Edit ? fvPhaudDets.FindControl("QOpClsCallDdl").ClientID : "" %>');
UPDATE 2(完整的工作示例)
<asp:FormView ID="fvPhaudDets" runat="server">
<EditItemTemplate>
<asp:DropDownList ID="QOpClsCallDdl" runat="server" onchange="GetDdlText()">
<asp:ListItem>aaa</asp:ListItem>
<asp:ListItem>bbb</asp:ListItem>
<asp:ListItem>ccc</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:FormView>
<input type="text" id="txtbox" />
<script type="text/javascript">
function GetDdlText() {
var fvmode = ('<%=fvPhaudDets.CurrentMode.ToString()%>');
if (fvmode == "Edit") {
var ddl = document.getElementById('<%= fvPhaudDets.CurrentMode == FormViewMode.Edit ? fvPhaudDets.FindControl("QOpClsCallDdl").ClientID : "" %>');
var txt = document.getElementById("txtbox");
var selectedText = ddl.options[ddl.selectedIndex].text;
txt.value = selectedText;
txt.focus();
}
}
</script>
用于测试的代码
fvPhaudDets.DataSource = new string[1];
fvPhaudDets.ChangeMode(FormViewMode.Edit);
fvPhaudDets.DataBind();
答案 1 :(得分:0)
尝试一下,看看是否有帮助。我认为您遇到的问题是您没有使用
ClientID
这与您的代码不完全相同。但是类似。您可以根据需要更改以下代码。
NAME | TYPE | CLUSTER-IP | EXTERNAL-IP | PORT(S)
---------------|------------|-------------|--------------|------------
app-external |LoadBalancer|xx.xx.xxx.xxx|xx.xxx.xxx.xxx|80:32014/TCP
---------------|------------|-------------|--------------|------------
kubernetes | ClusterIP | xx.xx.xxx.x | <none> | 443/TCP