jquery - 如何避免Kendo Multiselect在失去焦点时清除输入?
问题描述
我正在使用 JQuery 的 Kendo UI,并在此示例之后声明了一个多选作为 TagBox 。
我注意到,每当组件失去焦点时,输入的内容都会被清除。我希望避免这种行为,因为强迫用户在多选之外单击时重新键入他们所拥有的任何内容会很烦人。
我试图这样做:
$('.email_notification_create .k-multiselect .k-input').unbind('blur');
$('.email_notification_create .k-multiselect .k-input').on('blur', function(){
console.log(currentEmailInput.val());
console.log('overriden blur');
});
但是输入上的值已经被清除了,所以当焦点丢失时,其他人正在清除输入。
如何阻止多选清除其输入?
解决方案
正如您已经定义function
的那样,keyup
您可以在其中添加一个 else 部分以获取用户键入的最后一个值并将它们存储在某个全局变量中。然后,您可以使用focusout
事件,因此当输入松散焦点时,然后在内部定义一些分配values
给您的输入框的函数并更改它width
。
演示代码:
var valuess; //declare this
var widths; //and this
var currentId = 1;
function onDataBound(e) {
$('.k-multiselect .k-input').unbind('keyup');
$('.k-multiselect .k-input').on('keyup', onClickEnter);
//add this event when input lost it focus
$('.k-multiselect .k-input').on('focusout', values);
}
function onClickEnter(e) {
if (e.keyCode === 13) {
var widget = $('#products').getKendoMultiSelect();
var dataSource = widget.dataSource;
var input = $('.k-multiselect .k-input');
var value = input.val().trim();
if (!value || value.length === 0) {
return;
}
var newItem = {
ProductID: currentId++,
ProductName: value
};
dataSource.add(newItem);
var newValue = newItem.ProductID;
widget.value(widget.value().concat([newValue]));
$('.k-multiselect .k-input').val("")
valuess="";//empty values
} else {
//get the values of input and width of input
valuess = $('.k-multiselect .k-input').val()
widths = $('.k-multiselect .k-input').width()
}
}
$("#products").kendoMultiSelect({
autoClose: false,
dataTextField: "ProductName",
dataValueField: "ProductID",
dataSource: {
data: []
},
dataBound: onDataBound
});
function values() {
//set width
$('.k-multiselect .k-input').css("width", widths)
//remove readonly from input
$('.k-multiselect .k-input').removeClass("k-readonly")
$('.k-widget').addClass("k-state-hover k-state-focused")
$('.k-clear-value').removeClass("k-hidden")
$('.k-multiselect .k-input').val(valuess) //add the values
}
#products-list {
display: none !important;
}
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.3.1021/styles/kendo.mobile.all.min.css">
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/angular.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/jszip.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2020.3.1021/js/kendo.all.min.js"></script>
</head>
<select id="products" style="width: 100%;"></select>
推荐阅读
- c++ - 我正在尝试创建一个布尔函数来评估一个 char 并返回 true 如果 char 是 '(' ')' '*' '-' '+'
- c# - 如何按降序对文本文件中的不同类型数字排序到文本框?
- c# - 如何使用 Azure 的 Text-To-Speech 创建音频文件而不是实时文本到语音?(C# Unity SDK)
- r - 为什么字符列的类型是列表?
- c# - 阅读很多帖子,但无法让 Excel 在 C# 中关闭
- java - 即使 s2=s1,为什么在第二行代码中打印“xy”?
- php - 在 Woocommerce 管理员订单列表的自定义列中显示订单备注中的交易 ID
- html - 可以做成可点击的链接吗?
- ruby-on-rails - has_many :在 Rails 中通过和连接表
- java - 为什么我没有得到任何价值?