1

コードで webbrowser 要素を使用して、いくつかのものを自動化しています。いくつかのラジオボタンを含むこの Web ブラウザにフォームをロードしています。私の目的は、ラジオボタンの 1 つを選択することです。ただし、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()");
4

2 に答える 2

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");
于 2013-04-28T14:41:41.370 に答える
0

試す

webBrowser1.Document.GetElementById("chicken").RaiseEvent("onchange");
于 2013-04-28T09:35:41.610 に答える