触发更改选择输入以更新其他输入

时间:2012-12-19 02:40:33

标签: javascript jquery asp.net html-select casperjs

我正在研究一个刮刀,只是为了从运行在ASP.NET上的第三方网站中的3个选择框中获取数据,但问题在于它们是级联的(不确定这是否是它的调用方式) 。因此,第二个选择输入中出现的内容取决于第一个选择中选择的内容,我想获得所有可能性,以便我可以存储它们。

我的问题:

我很难确定如何触发更改(或其他)事件,以便更新第二个输入。我该怎么办?

我正在使用casperjs执行此操作,但这没关系,我只需要一种方法从前端javascript以编程方式执行。

因此,如果它在Chrome控制台中有效,它对我有用。

表单在此页面http://www.tuti.pt/contrat/net/default.aspx,我正在谈论的输入是'Distrito'和'Concelho'。

很抱歉阅读不多,但我想我无法隐藏更多细节。

我尝试了什么?

平常的事情,我真的以为.click()会起作用但不会,所以它不应该是一些asp.net特殊事件。

然后我休息了一下,看起来堆栈的这种特殊安静似乎很有意思找到我需要的东西。

Sys.Extended.UI.CascadingDropDownBehavior._clearItems (default.aspx:13)
Sys.Extended.UI.CascadingDropDownBehavior._setOptions (default.aspx:13)
Sys.Extended.UI.CascadingDropDownBehavior._onParentChange (default.aspx:13)
w.createDelegate (ScriptResource.axd:2)
w.addHandler.b.query.each.g (ScriptResource.axd:2)

如果有人对此有所了解,我将非常感谢您的帮助。

我刚看到似乎有一种方法可能正是我正在寻找的:raiseSelectionChanged(eventArgs)。我只是不知道我应该在什么对象中调用它以及我应该传递什么args:s

最后一个信息来自http://www.asp.net/ajaxlibrary/act_CascadingDropdown.ashx

2 个答案:

答案 0 :(得分:1)

我写了一些代码来完全从Chrome中的控制台执行此操作。以下是步骤:

  1. 在控制台上运行此命令以包含jQuery,因为该页面似乎不使用jQuery:

    var jq = document.createElement('script');
    jq.src = "http://code.jquery.com/jquery-latest.min.js";
    document.getElementsByTagName('head')[0].appendChild(jq);
    jQuery.noConflict();
    
  2. 现在您需要做的就是遍历Distrito选择框中的选项,并在请求有效负载中使用以下内容发出POST ajax请求:

  3. {'knownCategoryValues':'Distrito:1;','category':'Concelho','contextKey':''}其中1Distrito的ID,它来自select元素中相应选项中的值。因此,迭代它们的功能应该如下:

    $.each( $('#ctl00_ContentPlaceHolderMain_SigaWeb_ContrataWizardNet_SigaWeb_BookMetaDadosVeiculos1_Meta_Auto_23 > option')
          , function(index,value) {   
            $.ajax({
                     url:'http://www.tuti.pt/wsSigaWebSearchContrata/wsSigaWebSearch.asmx/GetConcelhosPorDistrito'
                    ,type:'POST'
                    ,contentType: 'application/json; charset=UTF-8' 
                    ,data: "{'knownCategoryValues':'Distrito:"+$(value).val()+";','category':'Concelho','contextKey':''}"
                    ,success: function(data){
                                console.log(data);}
                              }); 
           });
    

答案 1 :(得分:0)

所以,仍然没有找到如何触发事件,实际上现在我怀疑它甚至可能......也许如果有一种方法来获取对象Sys.Extended.UI.CascadingDropDownBehavior负责该选择输入,但我有不知道怎么做。

我现在的解决方案是使用该库使用的Web服务吗?更新输入。我找到了它在Chrome控制台中检查对象的URL。刚刚为第二个输入更改时创建了一个断点,当更改第一个选择时它就停在那里。然后我检查了本地的CascadingDropDownBehavior对象,并在_serviceMethod中找到了web服务url:D

更新

好的,所以最后我只编写了一个lil ruby​​脚本来从API / WS中获取,这非常简单易行,因为似乎无法从javascript浏览器运行时触发事件。