【问题标题】:jquery ui combobox set selected item with variable as selector namejquery ui组合框设置选定项目,变量为选择器名称
【发布时间】:2012-07-26 16:10:31
【问题描述】:

最近这个问题一直让我发疯。在 .each() 中,我循环选择元素并将它们转换为 jquery ui 组合框。这很好用。在设置所选值时,我遇到了问题。在我的同一个 .each() 中,我试图将选定的值设置为我在其他地方得到的值。

 $("#" + e + " [role='select']").each(function () {
  $(this).combobox();
  var selId = '#ContactCategoryId';
  var cellv = '9';
  $(selId+" option[value=" + cellv + "]").attr("selected", 'true');
 });

现在上面的代码可以完美运行,将组合框的值设置为 9 并将文本值设置为“单元格编号”。现在下面的代码失败了,没有错误,但不会更改所选值。我需要它以以下方式工作,我从当前选择元素中获取 Id:$(this).attr('id')。我已经尝试了很多不同的东西,请有人在这里给我指点灯。

$("#" + e + " [role='select']").each(function () {

  $(this).combobox();
  var selId = '#'+$(this).attr('id');
  var cellv = '9';
  $(selId+" option[value=" + cellv + "]").attr("selected", 'true');
});

我正在使用 JQuery 1.7 和最新的 JQuery UI,谢谢!

詹姆斯


由于我的声誉,我无法回答自己的问题,所以这是我的解决方案:

好的,在找到解决方案后,这个问题现在真的让我很恼火。通常,当我遇到 jquery 插件问题时,我只是查看源代码并尝试解决这个问题,但对于这个问题,我没有尝试过,这让我付出了代价。这是解决方案,答案很简单。

        $("#" + e + " [role='select']").each(function () {
             if($(this).css('display')=='none')
             {
                 $(this).combobox("destroy");
             }
             $(this).combobox();
        });

当查看我认为现在出现的来源时,它必须从某个地方获得它的价值。所以我手动设置了值:

              $(this).val('9')

它在表单的第一次打开时起作用,但在第二次打开时不起作用,然后我意识到如果它存在,我需要将其销毁,然后创建组合框。我敢肯定你的大师有一个更好的解决方案,但我很高兴我得到了这个工作

【问题讨论】:

  • $(this) 可能不是你想的那样......你能发布你所有的代码吗?
  • 嘿 ManseUK,谢谢。是的,我认为这可能是问题所在,但如果我实际上可以将变量 selId 的确切值登录到控制台,那么它就是我选择的名称。我已经更新了我原来的问题
  • 选择一个你应该做的选项$('select').val('9');所以在你的情况下$(this).val(cellv)你试过了吗?
  • 是的,不行,嘿。我不知道为什么在使用 $(this).attr('id') 检索 id 时它不起作用。我要快速设置一个 jsfiddle
  • 好的 - 我想我发现了一个问题......您使用的 $('#blah').each( # 是一个 id 选择器 - id 在文档上应该是唯一的

标签: jquery jquery-ui combobox selecteditem


【解决方案1】:

它不像想象的那么简单,因为组合框实际上不是select 元素...更新组合框元素会更新选择元素,但不是相反...我能看到的唯一方法是销毁组合框并重新创建它......这很有效:

$("#divselect").children('select').each(function() {

    $this = $(this); // cache $(this)
    var cellv = '0'; // new value

    // Destroy the combobox
    $this.combobox("destroy");

    // Unselect the currently selected option
    $("option:selected",$this).removeAttr("selected");

    // Select the option you want to select
    $("option[value='"+cellv+"']",$this).attr("selected", "selected");

    // Create the combobox again
    $this.combobox();

});

Working example here

另请注意..您不必这样做:

$("#showAnyCity").click(function() {
    checkdiv();
});

你可以这样做

$("#showAnyCity").click(checkDiv);

【讨论】:

  • 感谢 ManseUK 的反馈,不胜感激。是的,在我更新的答案中,我最终意识到组合框在初始创建后永远不会重新创建自己,所以我遵循了相同的破坏它的路径。
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 2017-05-01
  • 2011-02-13
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多