1

我遇到了 DropDownList 多选(参考)的问题。

我想要的是...

我想使用它们的值以编程方式从下拉列表中单击一些复选框(对于回发事项)。

简报


在“参考”中,我发现 jQuery 中有一个错误,所以我需要这样做 ->

$("select").multiselect("widget").find(":checkbox").each(function(){
    this.click();
});

所以,我尝试了这个并且工作了......然后,我添加了“[value ='value']”,它工作了。这正是我所需要的。

$("select").multiselect("widget").find(":checkbox[value='value']").each(function(){
    this.click();
});

这就是我所做的:我获得了一个数组,其中包含回发之前选择的值(顾问值)。然后,我想在“顾问”下拉列表中找到带有数组值的复选框,最后单击它。

代码->

for (var x = 0; x < consultantValues.length; x++) {
    var consultantSelected = ":checkbox[value='" + consultantValues[x] + "']";
    var doConsultantStringCode = $("id$='ddlConsultant']").multiselect("widget").find(consultantSelected);    
    for (var a = 0; a < doConsultantStringCode.length; a++) {
        doConsultantStringCode[a].click();
    }
}

这就像一个魅力:B 顺便说一下,我使用“for”而不是“each”,因为它运行得更快。

问题


在其他下拉列表中,我尝试做同样的事情......它有效,但突然停止工作:/

代码->

for (var i = 0; i < selectedManagements.length; i++) {
   var checkboxValue = ":checkbox[value='" + selectedManagements[i] + "']";
   var findCheckbox = $("[id$='ddlManagement']").multiselect("widget").find(checkboxValue);
   for (var k = 0; k < findCheckbox.length; k++) {
     findCheckbox[k].click();
   }
}

我坚持这个:/

注意事项

  • 我所看到的,findCheckbox 的长度 = 0 ...不明白为什么现在长度为 0,而之前的长度为 1 ...
  • 下拉菜单是 ASP 控件。
  • 如果您需要任何额外信息,请告诉我
4

2 回答 2

2

你为什么不添加checked="checked"属性而不是模拟点击?这实际上太 hack-ish 来触发用户没有启动的 DOM 事件。

只需这样做:

$("select").multiselect("widget").find(":checkbox").each(function(){
    this.attr({ checked: "checked" });
});
于 2012-10-23T17:15:36.230 回答
0

我终于设法解决了这个问题。

我和一些人一起工作,我们都在同一个网站上工作。问题是有人在我的代码之后移动了设置多选的部分(使用它的配置)......

所以,我的代码正在寻找仍然不存在的东西,所以它什么也没做。

有两种可能的做法:

  • 1:将编程方式选择的代码放在设置多选的代码之后。
  • 2:使下拉多选。然后添加您的代码,最后添加多选配置。(我最后做了什么XD)

2:示例:

        management.attr("multiple", 'multiple');

        if (selectedManagements != null) {
            for (var z = 0; z < selectedManagements.length; z++) {
                var checkboxValue = "[value='" + selectedManagements[z] + "']";
                var findSelectedCheckbox = management.children(checkboxValue);
                for (var lambda = 0; lambda < findSelectedCheckbox.length; lambda++) {
                    findSelectedCheckbox[lambda].setAttribute('selected', true);
                }
            }
        } 

           [...]

            management.multiselect({
                selectedList: 2,
                noneSelectedText: 'Select a management',
                width: 300
            }).multiselectfilter();

PS:我感谢 @mvbl-fst 帮助改进我的代码 :)

于 2012-10-24T15:58:04.280 回答