【问题标题】:Adding HTML element after the dataset is brought in引入数据集后添加 HTML 元素
【发布时间】:2013-08-07 17:26:54
【问题描述】:

Typeahead JS 中,我正在尝试添加一个选项,该选项会在用户开始输入后出现在下拉列表的底部。目前,我正在使用 'onOpened' Custom Event 在初始化 'tt-dropdown-menu' 元素后触发添加一些 HTML。

.on('typeahead:opened', onOpened)
  function onOpened($e) {
    $('.tt-dropdown-menu').html( "<a href="">Add Option</a>" );
}

问题是在初始化下拉列表时添加了 jQuery HTML,正如预期的那样,然后当用户开始输入具有自动完成结果的新数据集元素时,会在该 jQuery HTML 下方添加,因此 jQuery HTML 永远不会出现在下拉菜单的底部。您不能将 jQuery HTML 附加到数据集,因为在初始化下拉列表时该元素不存在。

有没有更简单的方法来解决这个问题?其他自定义事件似乎没有涵盖这种情况。

【问题讨论】:

    标签: javascript typeahead typeahead.js


    【解决方案1】:

    如果你只有一个dataset,你可以像我一样:将footer 添加到数据集,并将其添加为DOM 元素,而不是纯HTML 字符串。然后,您可以随意更改它(例如在您希望的任何事件上),您的更改会反映在下拉列表中。

    例子:

    $('#myinput').typeahead({
        // rest of your regular stuff, like 'name', 'remote', etc.
        footer: $('#dropdown-footer'),
    });
    

    ... 其中dropdown-footerdiv 的ID,你在你的dom 中的某个地方。然后,您可以执行以下操作:

    $('#dropdown-footer').html('Hello')
    

    【讨论】:

    • Nitzen 的好答案,虽然现在存在在未选择自动完成结果时将页脚保留在那里的问题,因为当数据集消失时它会消失。无需为每个事件设置不同的功能。似乎过于复杂。
    • @DanChristian:谢谢。实际上,我在自己的解决方案中做了一些“丑陋”的事情来克服这个问题。我添加了一个filter 函数,如果没有与查询匹配的术语,它会做两件事:(1)返回一个单一的、虚拟的条目。 (2) 在#input 上添加一个“no-results”CSS 类。我的 CSS 规则使单个 tt-suggestion(如果 #input.no-results-class 的子级)不显示。如果有 are 答案,filter 会删除 CSS 类。这样,即使没有结果,我仍然会得到一个不可见的“虚拟”结果,并显示我的页脚。 HTH。
    • 妈的,真丑!但这应该可以解决我的问题!谢谢。我已将它作为 GIT 上的问题添加到 Typeahead,希望尽快获得更优雅的解决方案。谢谢
    • 这在我的情况下不起作用,可能是因为我们的建议有多个部分,但我找到了另一种方法,请参阅stackoverflow.com/questions/25437107/…中的答案
    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多