【问题标题】:Populate a text field from autocomplete从自动完成填充文本字段
【发布时间】:2014-02-27 11:55:43
【问题描述】:

当在自动完成字段(“名称”)中选择了一个值时,我正在尝试填充一个字段(“数字”)。请查看此已更新 Link

假设我有两组数据。第 1 组包含名称,第 2 组包含数字。它们是相关的,例如: 名称 A = 0001

名称 B = 0002

名称 C = 0003 等

<div>
<table>
    <div id="Q101" class="printable">
        <tr>
            <td width="41" align="left" valign="top">
                <div class="QNumber">1.1</div>
            </td>
            <td align="left" valign="baseline">
                <div class="QText">Name:</div>
            </td>
            <td width="300">
                <div class="Response">
                    <input name="Text" type="text" id="vslName" size="31">
                </div>
            </td>
        </tr>
    </div>

        <div id="Q102">
        <tr>
            <td width="41" align="left" valign="top">
                <div class="QNumber">1.2</div>
            </td>
            <td align="left" valign="baseline">
                <div class="QText">Number:</div>
            </td>
            <td width="300">
                <div class="Response">
                    <input name="Text" type="text" id="Q101" size="10">
                </div>
            </td>
            < </tr>
    </div>
</table>
</div>

我想要的是当用户从自动完成字段 (id="vslName") 中选择 NAME 时,数字会自动填充到已提交的 IMO NUMBER (id="Q101") 中。另一个问题 - 在哪里放置数字?我将自动完成值保留在函数中,因为最多有 50 个条目。因此:

$(function() {
    var availableTags = [
      "AZOV SEA",
      "BARENTS SEA",
      "KARA SEA",
      "EAST SIBERIAN SEA",
      "TUCHKOV BRIDGE",
    ];
    $( "#vslName" ).autocomplete({
      source: availableTags
    });
  });

提前感谢您! PS。我不是 JS 的专业人士,因此如果这对你们来说是一件小事,请“原谅我的法语”))))) PS.2 - 在上面的代码中 type="text" 可能是 "number" - 并不重要 atm)))

【问题讨论】:

    标签: jquery autocomplete


    【解决方案1】:

    为什么不直接使用jQuery UI's autocomplete

    编辑:如果您使用 jQuery UI 的自动完成功能,那么您需要绑定到 select 事件来处理它。详情请见http://api.jqueryui.com/autocomplete/#event-select

    这样的事情应该可以解决问题:

    $("#vslName").autocomplete({
        source: availableTags,
        select: function (event, ui) {
            var tag = ui.item.value;
            $('input#Q101').val(availableTags.indexOf(tag) + 1);
        }
    });
    

    我不能 100% 确定这是否可行,但基本思想是在 select 事件中,您获取所选标签的值,然后将输入的值设置为该标签中包含的文本.

    编辑:正如我在评论中提到的,JavaScript 缺少像哈希或字典这样的构造,这是实现此目的的明显方法,但它可以被伪造。

    首先,您的数组必须是对象数组,而不仅仅是字符串数组。您需要为 jQuery UI 定义 labelvalue 属性。您还可以定义自己的属性,因此,如果您也创建了 number 属性,那应该可以完成这项工作。

    这样的东西比较合适:

    var availableTags = Array;
    availableTags[0] = { "name": "AZOV SEA", "value": "AZOV SEA", "number": 0 };
    

    对每个剩余的标签重复availableTags 行,每次递增数字。然后,您可以使用$.grep 方法获取所选标签的数字属性,如下所示:

    var tag = ui.item.value;
    var item = $.grep(availableTags, function (e) { return e.name == tag; });
    $('input#Q101').val(item[0].number);
    

    【讨论】:

    • 它被使用了!对于字段自动完成,即 NAME))))) 上面的函数是 jQuery 自动完成)))
    • 问题是将值传递到字段NUMBER!
    • @Alexander 您链接到的 JSFiddle 似乎不包含 jQuery UI
    • @Matthew,是的,但是你会把 NUMBERS 放在哪里?
    • @Alexander 在大多数其他编程语言中,这就是字典、散列或关联数组的用途。 JavaScript 实际上并没有,但是你可以使用 jQuery 的 grep 方法来伪造它。我将更新我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-02-01
    • 2015-10-25
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多