繁体   English   中英

c#webbrowser单击表单中的单选按钮

[英]c# webbrowser click radio button in a form

我在代码中使用了webbrowser元素来自动化一些东西。 我正在此Web浏览器中加载一个表单,其中包含多个单选按钮。我的目的只是选择一个单选按钮。 但是,在html代码中,有一个JS代码,它根据所选的单选按钮更改表单操作目标。 所以如果我用

webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");

它选择了我想要的单选按钮,但仅此而已。 我的意思是它不会触发JS代码。 在此JS代码中,它还会提交页面,因此上面的代码仅选择单选按钮并调用同一页面。 我该如何解决?

表单标签如下所示:

<form id="choose_dept" method="POST" action="/place/">

JS代码是这样的:

<script type="text/javascript">
<!--
$("#choose_dept").change(function(){
  $("#choose_dept").attr('action', '/place/' + ('input[name=department]:checked').val()
   + '/' );
  this.submit();
});

- >

最后编辑:

        String sc = @"$(document).ready(function(){" +
        "$(\"input:radio[name=department]\").change(function() {" +
        "$(\"#choose_dept\").attr('action','place/'+$(this).val());" +
        "$(\"#choose_dept\").submit();" +
        "});" +
        "});";

        HtmlElement headElem = (HtmlElement)webBrowser1.Document.GetElementsByTagName("head")[0];
        HtmlElement scriptElem = (HtmlElement)webBrowser1.Document.CreateElement("script");
        IHTMLScriptElement elem = (IHTMLScriptElement)scriptElem.DomElement;
        elem.text = sc;
        headElem.AppendChild(scriptElem);

        webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");
        webBrowser1.Document.InvokeScript("ready()");

我认为在您的情况下,比c#代码更多的是您的jquery代码。 请尝试以下代码:

$(document).ready(function(){
$("input:radio[name=department]").change(function() {
$("#choose_dept").attr('action','place/'+$(this).val());
$("#choose_dept").submit();
});
});

编辑 :(由于您提到您无法控制HTML代码,因此您可以即时添加我刚刚向您显示的JavaScript的JavaScript代码,如下所示:

        String sc = @"$(document).ready(function(){
               $("input:radio[name=department]").change(function() {
               $("#choose_dept").attr('action','place/'+$(this).val());
               $("#choose_dept").submit();
               });
               });";

        var doc = webBrowser1.Document;
        var headElem = (HtmlElement) doc.GetElementsByTagName("head")[0];
        var scriptElem = (HtmlElement) doc.CreateElement("script");
        var elem = (IHTMLScriptElement)scriptElem.DomElement;
        elem.text = sc;
        headElem.AppendChild(scriptElem);

但是,您需要添加参考

 Microsoft.mshtml

您还需要在代码顶部添加

 using mshtml;

现在,如果您不想即时更改它,而确实只想调用javascript方法,则可以使用以下方法:

webBrowser1.Document.InvokeScript("methodnamehere()");

根据您的代码的最新修改:

我认为一旦选中单选按钮,您需要在浏览器中模拟点击。 因此,现在就像这样:

 String sc = @"$(document).ready(function(){" +
        "$(\"input:radio[name=department]\").change(function() {" +
        "$(\"#choose_dept\").attr('action','place/'+$(this).val());" +
        "$(\"#choose_dept\").submit();" +
        "});" +
        "});";

        HtmlElement headElem = (HtmlElement)webBrowser1.Document.GetElementsByTagName("head")[0];
        HtmlElement scriptElem = (HtmlElement)webBrowser1.Document.CreateElement("script");
        IHTMLScriptElement elem = (IHTMLScriptElement)scriptElem.DomElement;
        elem.text = sc;
        headElem.AppendChild(scriptElem);

        webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");

        HtmlElement simulateClick = webBrowser1.Document.GetElementById("chicken");
        simulateClick.InvokeMember("click");

尝试

webBrowser1.Document.GetElementById("chicken").RaiseEvent("onchange");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM