我想将selt2中的字符串的数字字符限制为十(10)个字符,例如:

"apple", is valid.. has 5 characters
"book", is valid.. has 4 characters
"Incomprehensibilities", is invalid... has 21 characters, permited max 10 characters

我有SELECT2代码,但我不知道如何限制字符数量

$("#customer_tag_ids").select2({
    maximumSelectionLength: 5,
    multiple: true,
    tags: true,
    tokenSeparators: [',', ' '],
    createTag: function (params) {
      if (params.term.match(/^(?![\d ])[a-z\d ]*$/i)) {
        // Return null to disable tag creation
        return {
          id: params.term,
          text: params.term,
          tag: true
        }
      }
      return null;
    },
    language: {
      maximumSelected: function (e) {
        return I18n.t('customers.alert.limit_max');
      },

      inputTooShort: function (e) {
        return I18n.t('customers.alert.limit_min');
      },

      noResults: function(){
        return I18n.t('customers.alert.not_result_found');
      }
    },
  });

推荐答案

我修改了您的createTag选项,以防止用户输入超过10个字符的文本.此外,我在下面添加了div标签,以便在用户想要创建新标签时给出警告消息.

另一种解决方案

起初,我认为我们可以使用事件select2:selecting

Selt2:在 Select 结果之前触发 Select .这一事件是可以防止的.

这意味着你可以捕捉到事件$('#customer_tag_ids').on('select2:selecting, (event) => { // do something }) 然后使用方法event.preventDefault()来防止 Select 该值.

但是后来我意识到您已经有了creatTag选项中的一些条件,并且您可能想要判断条件并将消息仅显示给新标记,所以我以下面的解决方案结束.

$("#customer_tag_ids").select2({
  maximumSelectionLength: 5,
  multiple: true,
  tags: true,
  tokenSeparators: [',', ' '],
  createTag: function(params) {
    let text = params.term;
    $('#warning-text').show();
    if (text.length <= 10) {
      $("#warning-text").text(`"${text}", is valid.. has ${text.length} characters`);
    } else {
      $("#warning-text").text(`"${text}", is invalid... has ${text.length} characters, permited max 10 characters
`);
      // return null to prevent create new tag
      return null;
    }

    if (params.term.match(/^(?![\d ])[a-z\d ]*$/i)) {
      // Return null to disable tag creation
      return {
        id: params.term,
        text: params.term,
        tag: true
      }
    } else {
      $("#warning-text").text(`"${text}", is invalid... it's doesn't match the pattern /^(?![\d ])[a-z\d ]*$/i
`);
    }
    return null;
  },
  language: {
    maximumSelected: function(e) {
      // return I18n.t('customers.alert.limit_max');
    },

    inputTooShort: function(e) {
      // return I18n.t('customers.alert.limit_min');
    },

    noResults: function() {
      // return I18n.t('customers.alert.not_result_found');
    }
  },
});

// Hide the warning text when open/close the dropdown
$("#customer_tag_ids").on("select2:open, select2:close", (e) => {
  $("#warning-text").hide();
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

<select id="customer_tag_ids" class="js-example-basic-single" name="state" style="width: 300px">
  <option value="text-1">Text 1</option>
  <option value="text-2">Text 2</option>
</select>

<div id="warning-text" style="margin-top: 50px">

</div>

Jquery相关问答推荐

Ajax 替换而不是追加

提醒未保存的表单更改

AngularJS 中的 ScrollTo 函数

如何使用 jQuery 获取所有 ID?

在范围内设置文本

jQuery 的 ajax 默认超时值是多少?

在 Javascript 中,字典理解或 Object `map`

如何重新启用 event.preventDefault?

谷歌图表重绘/zoom 窗口调整大小

如何在 jQuery .each() 的每次迭代之间添加暂停?

验证外部脚本是否已加载

如何使用 Javascript/jQuery 确定图像是否已加载?

如何通过 DOM 容器访问 Highcharts 图表?

如何使用 jQuery 停止默认链接点击行为

检测夹点的最简单方法

!!~(不是波浪号/bang bang 波浪号)如何改变包含/包含数组方法调用的结果?

如何使锚链接不可点击或禁用?

上传文件前验证文件扩展名

自调用函数前的分号?

jQuery中的wait()或sleep()函数?