【问题标题】:Trigger change on select input to update other input在选择输入上触发更改以更新其他输入
【发布时间】:2012-12-19 02:40:32
【问题描述】:

我正在开发一个抓取工具,只是为了从在 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

【问题讨论】:

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


    【解决方案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':''} 其中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);}
                              }); 
           });
    

    【讨论】:

    • 感谢您的帮助。但这实际上只是使用 API/WS,我可以与 ruby​​ 一起使用,我更舒服。我问是否有任何方法可以触发更改事件,因为我已经编写了代码来给我一个包含所有数据的 json 文档。我看到你是一个 ASP.NET 人,所以:你知道如何触发事件以更新第二个选择输入吗?
    【解决方案2】:

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

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

    更新:

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

    【讨论】:

      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多