fix(form-select): lay-creatable 旧版微软拼音输入法兼容性问题 (#1667)

* fix(form-select): lay-creatable 在旧版微软拼音输入法下无法创建中文 option 的问题

* fix(form-select): 旧版微软拼音输入法在 IE11 下无法创建中文 option 问题

* chore: lint

* update

* update

* updae
This commit is contained in:
morning-star 2024-03-13 16:02:12 +08:00 committed by GitHub
parent 56199df2c7
commit dd81129d2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -408,6 +408,11 @@ layui.define(['lay', 'layer', 'util'], function(exports){
// 搜索项
var laySearch = select.attr('lay-search');
// #1449
// IE10 和 11 中,带有占位符的 input 元素获得/失去焦点时,会触发 input 事件
// 当鼠标按下时,根据 input 元素上的 __ieph 标识忽略 input 事件
var needPlaceholderPatch = !!(lay.ie && (lay.ie === '10' || lay.ie === '11') && input.attr('placeholder'));
// 展开下拉
var showDown = function(){
@ -431,6 +436,15 @@ layui.define(['lay', 'layer', 'util'], function(exports){
}
followScroll();
if(needPlaceholderPatch){
dl.off('mousedown.select.ieph').on('mousedown.select.ieph', function(){
input[0].__ieph = true;
setTimeout(function(){
input[0].__ieph = false;
}, 60)
});
}
};
// 隐藏下拉
@ -582,9 +596,10 @@ layui.define(['lay', 'layer', 'util'], function(exports){
layui.each(dds, function(){
var othis = $(this);
var text = othis.text();
var isCreateOption = isCreatable && othis.hasClass(CREATE_OPTION);
// 需要区分大小写
if(isCreatable && text === rawValue){
if(isCreatable && !isCreateOption && text === rawValue){
hasEquals = true;
}
@ -598,7 +613,7 @@ layui.define(['lay', 'layer', 'util'], function(exports){
var not = text.indexOf(value) === -1;
if(value === '' || (origin === 'blur') ? value !== text : not) num++;
origin === 'keyup' && othis[(not && (isCreatable ? !othis.hasClass(CREATE_OPTION) : true)) ? 'addClass' : 'removeClass'](HIDE);
origin === 'keyup' && othis[(isCreatable ? (not && !isCreateOption) : not) ? 'addClass' : 'removeClass'](HIDE);
});
// 处理 select 分组元素
origin === 'keyup' && layui.each(dts, function(){
@ -623,6 +638,11 @@ layui.define(['lay', 'layer', 'util'], function(exports){
return false;
}
if(needPlaceholderPatch && e.target.__ieph){
e.target.__ieph = false;
return false;
}
notOption(value, function(none, hasEquals){
if(isCreatable){
if(hasEquals){
@ -661,12 +681,7 @@ layui.define(['lay', 'layer', 'util'], function(exports){
};
if(isSearch){
// #1449: IE10 和 11 中,带有占位符的 input 元素获得/失去焦点时,会触发 input 事件
var eventsType = 'input propertychange';
if(lay.ie && (lay.ie === '10' || lay.ie === '11') && input.attr('placeholder')){
eventsType = 'keyup';
}
input.on(eventsType, search).on('blur', function(e){
input.on('input propertychange', layui.debounce(search, 50)).on('blur', function(e){
var selectedIndex = select[0].selectedIndex;
thatInput = input; // 当前的 select 中的 input 元素