用户输入后无法设法获取文本框的值

时间:2013-10-26 21:00:50

标签: c# html geckofx

C#代码:

GeckoElementCollection _Ellements = geckoWebBrowser1.Document
    .GetElementsByTagName("input");

foreach (GeckoElement _e in _Ellements)
{
    if (_e.GetAttribute("value") == "username"
    {
        // Code here if statement = true
    }

}

HTML代码:

<input type="text" name="user" id="smf_autov_username" size="30" tabindex="1" maxlength="25" value="" class="input_text">

每秒调用此代码以查看用户是否更改了文本框的内容 但它不起作用,请帮助:(

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

foreach (GeckoElement element in elements)
{
    GeckoInputElement input = (GeckoInputElement)element;
    if (input.Value == username)
    {
        //
    }    
}

答案 1 :(得分:0)

如果我正确理解了您的问题,那么问题在于,只读取DOM时,通常属于<form>的元素的值不可用。浏览器希望在提交表单时使用它们。

好消息是,让c#程序可以使用这个值并不难,因为javascript 可以读取它,并把它放在c#可以获得它的地方。你只需要有一些javascript就可以将@value复制到你的c#可以看到的属性(比如@ data-value)。这可以在模糊或键盘处理程序中完成。例如:

<input id="foo" onblur="this.setAttribute('data-value', this.value)"></input>

这表示当“模糊”事件发生时(例如,当您离开该字段时),将该值复制到名为“data-value”的另一个属性(该名称没有什么特别之处,它也可以被命名为数据-foobar)。然后在你的c#中,你可以这样读:

if(_e.GetAttribute("data-value")) == "username")

有关更多示例,请参阅以下stackoverflow问题:

现在,我看到你正在检查每一秒,而不是触发某些事件。也许你想要在每个键盘上复制数据值而不是模糊。请注意,如果需要,您还可以在c#:

中自行模糊
var activeElement = _browser.Window.Document.ActiveElement;
if(activeElement!=null)
    activeElement.Blur();