【问题标题】:How to force Materialize autocomplete text to flow to new line?如何强制实现自动完成文本流到新行?
【发布时间】:2021-04-07 19:23:56
【问题描述】:

我需要在建议的自动完成中重复。为什么?
可能有两个同名同姓的人。我正在使用 Materialize,但它不提供该功能。我正在考虑添加一些额外的文本,例如电子邮件左右,以使其按我需要的方式工作。为了让它看起来更好,我希望“额外”文本总是在新行上。

但我不知道该怎么做。我尝试了<BR>
\n,但没有成功。知道如何使它工作吗?

    data: {
        "Radek Surname - radeksurname@ymail.com": null,
        "Radek<BR> new line": null,
        "Radoslav": 'http://placehold.it/250x250'
    },

https://jsfiddle.net/radek/8e7kvf6r/17/

看起来 BR 标记已被删除,并且不再出现在 HTML 源代码中。看图。

【问题讨论】:

标签: javascript css autocomplete materialize


【解决方案1】:

极其不雅,但又快又脏:

添加到 CSS:

.autocomplete-content span
{
  white-space: pre;
}

在js中:

{
  "Radek\n new line": null,
  [`Or Radek
another new line`]: null
}

小提琴:https://jsfiddle.net/c6revjmu/2/

【讨论】:

  • 对我来说似乎不是特别不雅,而是仍然使用具有有限选项的特定 autocomplete 插件的唯一方法。
  • 我喜欢你的解决方案......它很优雅。以防万一实现某些更改,它可能无法正常工作。我猜另一种解决方案会起作用。
【解决方案2】:

Materialize 0.98.0 会因为突出显示而将html-conversion 加倍。 See Source

每个选项首先转换为DOM-object。然后通过.text() 再次提取文本。这就是杀死&amp;lt;br&amp;gt; 解决方案的原因。但这又被转换为DOM-object

所以我们可以像这样巧妙地进行双重转义:

data: {
    "Radek Surname &lt;br&gt; radeksurname@ymail.com": null,
    "Radek &lt;br&gt; new line": null,
    "Radoslav": 'http://placehold.it/250x250'
},

因为&amp;lt;br&amp;gt; 转换为&amp;lt;br&amp;gt; 转换为换行符。

不需要额外的jscss

function sendItem(val) {
    document.getElementById('log').textContent = val + '\n' +
          document.getElementById('log').textContent;
}

$(function () {
    $('input.autocomplete').autocomplete({
        data: {
            "Radek Surname&lt;br&gt; radeksurname@ymail.com": null,
            "Radek&lt;br&gt; new line": null,
            "Radoslav": 'http://placehold.it/250x250'
        },
        onAutocomplete: function(txt) {
          sendItem(txt);
          alert(txt);
        },
        limit: 20, // The max amount of results that can be shown at once. Default: Infinity.
    });

});
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/css/materialize.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/js/materialize.min.js"></script>

<div class="row">
    <div class="col s12">
        <div class="row">
            <div class="input-field col s6">
                <input type="text" id="autocomplete-input" class="autocomplete" autocomplete="off">
                <label for="autocomplete-input">Type my name - Radek</label>
            </div>
        </div>
    </div>
</div>

还有:JsFiddle:https://jsfiddle.net/sjtznqh5/

【讨论】:

  • 完美运行。你能解释一下双重转义部分吗?我以为&amp;lt; 逃脱了&amp;lt; onece
  • 是的,&amp;lt; 转义 &amp;lt; 只是 onec。我刚刚调用了双重转义,因为我们需要多走一步。首先&amp;lt;br&amp;gt; 转义&amp;lt;br&amp;gt;。其次&amp;lt;br&amp;gt; 转义换行符。希望说明清楚。
  • 我想我现在明白了... ;-) 虽然可能不需要它,因为您解决了这个问题... 这个问题有解决方案吗? stackoverflow.com/questions/65520784/…
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2013-09-10
相关资源
最近更新 更多