0

我正在研究一个刮板,只是为了从在 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). 我只是不知道我应该在什么对象中调用它以及我应该传递什么参数:s

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

4

2 回答 2

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 请求:

{'knownCategoryValues':'Distrito:1;','category':'Concelho','contextKey':''}其中1是 的 ID Distrito,它来自 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);}
                          }); 
       });
于 2012-12-19T11:42:39.303 回答
0

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

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

更新:

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

于 2012-12-19T05:13:44.633 回答