无法在用户输入后获取文本框的值
本文关键字:取文本 获取 用户 输入 | 更新日期: 2023-09-27 18:36:56
C# 代码:
GeckoElementCollection _Ellements = geckoWebBrowser1.Document
.GetElementsByTagName("input");
foreach (GeckoElement _e in _Ellements)
{
if (_e.GetAttribute("value") == "username"
{
// Code here if statement = true
}
}
网页代码:
<input type="text" name="user" id="smf_autov_username" size="30" tabindex="1" maxlength="25" value="" class="input_text">
每秒调用一次此代码,以查看用户是否已更改文本框的内容但它不起作用,请帮助:(
如果我
正确理解您的问题,问题是通常在读取 DOM 时通常属于<form>
的元素的值不可用。浏览器希望在提交表单时使用它们。
好消息是,使 c# 程序可以使用该值并不难,因为 javascript 可以读取它,并将其放在 c# 可以获取的地方。你只需要有一点 JavaScript 将@value复制到 c# 可以看到的属性(如 @data-value)。这可以在模糊或键控处理程序期间完成。例如:
<input id="foo" onblur="this.setAttribute('data-value', this.value)"></input>
这表示当"blur"事件发生时(例如,当您离开字段时),将值复制到另一个名为"data-value"的属性(该名称没有什么特别之处,也可以命名为data-foobar)。然后在 c# 中,您可以像这样阅读它:
if(_e.GetAttribute("data-value")) == "username")
有关更多示例,请参阅以下堆栈溢出问题:
如何在文本区域中显示输入(名称+值)?
有没有办法使用类似于内容可编辑的文本区域的用户提交值更新 DOM?
现在,我看到您每秒都在检查,而不是触发某个事件。也许您希望在每次键控时都复制到数据值,而不是模糊。请注意,如果需要,您也可以在 c# 中自己造成模糊:
var activeElement = _browser.Window.Document.ActiveElement;
if(activeElement!=null)
activeElement.Blur();
尝试这样的事情:
foreach (GeckoElement element in elements)
{
GeckoInputElement input = (GeckoInputElement)element;
if (input.Value == username)
{
//
}
}