【问题标题】:Get TextBox text after text is changed by JavascriptJavascript更改文本后获取TextBox文本
【发布时间】:2014-10-29 21:57:43
【问题描述】:

我在 ASP.NET 页面中有一个类似于 this one 的“ColorPicker”功能,只是右侧的阴影是根据是否已使用阴影动态填充的。

我有一个显示所选颜色/阴影的十六进制值 (#RRGGBB) 的文本框:

<asp:TextBox runat="server" ID="TbxColorhex" Text="#FF0000" Enabled="false" />

呈现为:

<input name="TbxColorhex" type="text" value="#FF0000" id="TbxColorhex"></input>

单击阴影(表格单元格)时,我正在使用 JavaScript 更改 TextBox 中的文本(十六进制值)。

function selectShade(shadehex) {
    if (shadehex) {
        document.getElementById('divpreview').style.background = shadehex;
        document.getElementById('<%= TbxColorhex.ClientID %>').value = shadehex;
    }
}

我有一个按钮来确认选择的颜色:

<asp:Button ID="BtnSelectColor" runat="server" Text="Select Color" OnClick="BtnSelectColor_Click" style="margin: 0 auto" />

点击时触发此方法(在代码后面):

protected void BtnSelectColor_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(TbxColorhex.Text))
    {
        Response.Redirect(Page.ResolveClientUrl("~/Something/AddProject.aspx?projcolor=" + TbxColorhex.Text));
    }
}

问题

当单击阴影时,JavaScript 会适当地更改 TextBox 中的文本(您可以看到 TextBox 中的文本发生变化。但是,如果我使用调试器,我注意到 value 的值没有变化input 标记中的属性。因此,当我单击按钮时,它不会获得 TextBox 显示的文本。

【问题讨论】:

  • 在特定的EventArgs e 中你能看到调试时是否有 e.text 或类似的东西..?从 TextBox 的 onChange..not the button 请记住 Buttons 触发 PostBacks 因此您可能想要编写一个使用 __DoPostBack(the name of the textbox, false); 的 javascript 函数,然后在该特定事件上无论它是 OnChange 还是 Exit 、 onBlur 等。然后看看你能不能在那里捕捉到它

标签: javascript c# html asp.net


【解决方案1】:

问题出在Enabled="false"。禁用输入的值不包含在浏览器提交给服务器的 POST 数据中。您可以尝试将TextBox 设为只读。

如果您必须禁用它,请将HiddenField 控件添加到表单并在javascript 中设置它的值,就像为TextBox 设置它一样。然后,在服务器端代码中将值从HiddenField 传输到TextBox

【讨论】:

  • 即使启用了 TextBox,它也没有按照我想要的方式工作。但是HiddenField 完美运行。谢谢!
  • 事件制作启用并使用只读,将不起作用。需要使用HiddenField
【解决方案2】:

不用担心输入标签上的 value 属性。担心通过 POST 发送到服务器的值。

如果 BtnSelectColor_Click 中的值不正确,可能是因为您在页面加载的某处设置了该值并覆盖了回发值。

【讨论】:

  • 是的,BtnSelectColor_Click 中的值基本上是它在页面加载和单击颜色图中的一种颜色时获得的值。当单击右侧的阴影之一时,我将使用 javascript 覆盖该值而无需回发。
  • 您的 Page_Load 代码正在覆盖用户发送给您的值。在设置 Page_Load 中的值之前,您需要检查 Page.IsPostback
  • @Igor 的回答建议 HiddenField 成功了。感谢您的帮助!
猜你喜欢
  • 2017-03-18
  • 2013-06-22
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多