【问题标题】:Select2 4.x: How to actually limit the search input?Select2 4.x:如何实际限制搜索输入?
【发布时间】:2016-09-16 07:56:05
【问题描述】:

我指的是选项maximumInputLength:将其设置为例如如果我输入长度为 8 的术语,“5”会显示消息“请删除 3 个字符”。不过,可以输入任意数量的字符。

虽然在某些情况下可能需要这样做,但它与 <input type="text" maxlength="5"> 的工作方式不同,因为这会阻止任何超过 5 个字符的输入。

所以为了在我的 UI 中获得一致的行为,我的问题是:如何实际限制输入?


到目前为止我已经尝试过:消息是在function MaximumInputLength 中生成的,所以我尝试按照here 的说明覆盖该函数,但没有成功。我收到了几个错误,例如“选项未定义”,“装饰未定义”,......虽然我仍然认为我必须以某种方式覆盖某些事情,但在 select2 4.x 中这样做的过程对我来说有点不清楚,所以任何帮助表示赞赏


编辑:velimir-tchatchevsky 的 answer 向我指出了这个解决方法:

$('select').select2().on('select2:open', function() {
    $('.select2-search__field').attr('maxlength', 5);
});

有点骇人听闻(如果 css 类在未来版本中发生变化怎么办?),所以我更喜欢不同的解决方案,但这样就可以了

【问题讨论】:

  • 在“标签”模式下使用 select2 时不起作用。这就是诀窍:$element.select2({...}); $element.data('select2').$container.find('.select2-search__field').attr('maxlength', 5);
  • @AlexeyKosov 似乎并非如此。也许是因为这是以前的不同版本,或者是因为用户更新了他们的响应,但如果你查看上面的代码,它会找到页面中的所有搜索字段并更新它们。你的对一个特定的人这样做,但任何一个都可以。我已经验证了使用标签模式的代码。

标签: jquery select2 jquery-select2-4


【解决方案1】:

你可以在示例中使用简单的 jQuery 来限制按键释放时的输入,当达到最大长度时,我也会禁用输入:

$("input").keydown(function(e){
    if($("#input").val().length > 2){
          $("#input").val($("#input").val().substr(0, 3));
          $("#input").prop('disabled', true);
     }
});

【讨论】:

  • disabled="true" 不是我想要的,而且在下拉菜单打开之前输入字段不可用,但这帮助我构建了一个解决方法,请参阅更新的问题。谢谢! PS:应该是attr(),而不是prop()
猜你喜欢
  • 1970-01-01
  • 2018-01-30
  • 2019-03-24
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多