提问人:ad0rfin 提问时间:8/7/2023 最后编辑:ad0rfin 更新时间:8/7/2023 访问量:61
防止将不同的符号写入 select2 输入
Prevent writing different symbols into select2 input
问:
我有默认选择:
<select id="indivCitizen" multiple="multiple">
<option value=""></option>
</select>
我用 select2 替换:
$(document).ready(function () {
$('#indivCitizen').select2({
ajax: {
url: "/countrylist",
dataType: 'json',
delay: 250,
data: function (params) {
var query = {
search: params.term
}
console.log(params)
return query;
},
processResults: function (data) {
return {
results: data.items
};
}
},
placeholder: 'Write country name',
minimumInputLength: 3,
maximumResultsForSearch: 1,
tags: true,
maximumSelectionLength: 1,
language: {
inputTooShort: function () {
return 'Search will start after 3 symbols';
},
maximumSelected: function (e) {
var t = "You can choose only one";
return t
},
},
});
})
这一切都与MSSQL DB有关,因此我需要保护我免受不同的注入
我试过这个,但它仅适用于默认输入:
document.getElementById("indivCitizen").addEventListener("keydown", function (e) {
if (e.key.match(/[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/))
return e.preventDefault();
});
document.getElementById("indivCitizen").addEventListener("input", function (e) {
this.value = this.value.replace(
/[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/g,
""
);
});
所以我需要防止将不同的符号写入 select2 输入
答:
0赞
freedomn-m
8/7/2023
#1
若要在输入时阻止特殊字符(以改进 UX),可以将委托事件侦听器添加到
input.select2-search__field
示例(如标记的 jquery)
$(document).on("input", "input.select2-search__field", function (e) {
this.value = this.value.replace(
/[()`'"!@#$%^&*=_+,.*;:/|\\<>?~]/g,
""
);
});
笔记:
- 这将影响页面上的所有 SELECT2 输入
- 如果光标不在末尾,这将提供可怕的用户体验,即在每次无效的按键/输入时跳转到输入的末尾
但应该让你更接近你的最终目标
评论
0赞
ad0rfin
8/7/2023
:D看起来真的很糟糕,但无论如何都需要找出如何防止将符号写入 select2 输入而不会遇到任何麻烦
0赞
freedomn-m
8/7/2023
这是常见的问题 - 有一种方法可以解决它,方法是获取 selectionState/selectionEnd 并恢复它以重置光标位置。这里的关键是选择器。this.value = this.value.replace(
$(document).on("input", "input.select2-search__field",
评论
countrylist
data: function(params)
search
var query = { search: params.term.replace(/\-/g, '') }
search: params.term.replace(/[()'"!@#$%^&*=_+,.*;:/|\\<>?~]/g, "")
/,/g
-
\-