我正在研究一个刮刀,只是为了从运行在ASP.NET上的第三方网站中的3个选择框中获取数据,但问题在于它们是级联的(不确定这是否是它的调用方式) 。因此,第二个选择输入中出现的内容取决于第一个选择中选择的内容,我想获得所有可能性,以便我可以存储它们。
我很难确定如何触发更改(或其他)事件,以便更新第二个输入。我该怎么办?
我正在使用casperjs执行此操作,但这没关系,我只需要一种方法从前端javascript以编程方式执行。
表单在此页面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
答案 0 :(得分:1)
我写了一些代码来完全从Chrome中的控制台执行此操作。以下是步骤:
在控制台上运行此命令以包含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();
现在您需要做的就是遍历Distrito
选择框中的选项,并在请求有效负载中使用以下内容发出POST ajax请求:
{'knownCategoryValues':'Distrito:1;','category':'Concelho','contextKey':''}
其中1
是Distrito
的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浏览器运行时触发事件。