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

时间:2013-04-28 06:13:05

标签: c# javascript jquery

我在我的代码中使用webbrowser元素来自动化一些东西。我正在这个webbrowser中加载一个表单,其中包含几个单选按钮。我的目的是选择一个辐射按钮。但是,在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();
});

- &GT;   

上次修改:

        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()");

2 个答案:

答案 0 :(得分:2)

我认为在你的情况下,不仅仅是c#代码,你的问题就是你的jquery代码。请尝试以下代码:

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

修改 :(由于您提到您无法控制HTML代码,因此您可以动态添加我刚刚向您展示的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");

答案 1 :(得分:0)

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