jQuery的dialog如何重新自适应
正常点开很正常,但是如果里面的select选择栏过长,就会出显滑动栏,如果能点击select选择栏后dialog重新自适应宽度,然后不再出现滑动条(高度其实还无所谓,主要是宽度)
layUI初始化过select的UI,显示的非原生select,用下面代码监控下layUI打开关闭即可
const observer = new MutationObserver((mutationsList, observer) => {
var mutation = mutationsList.find(i => i.target.classList.contains('layui-form-select'));
if (!mutation) return;
var target = mutation.target;
if (!$(target).is(':visible')) return;
var pop = $(target).find('.layui-anim-upbit');
var dialog = pop.closest('.ui-widget-content');
if (pop.is(':visible')) {//打开
console.log('open')
var scrollWidth = dialog.prop('scrollWidth');
var clientWidth = dialog.prop('clientWidth');
if (scrollWidth > clientWidth) {//出现滚动条,需要调整对话框宽度
dialog.dialog('option', 'width', scrollWidth + 30)//需要加上dialog的padding,border
}
}
else {//关闭,设置宽度为默认的400
console.log('close')
dialog.dialog('option', 'width', '400px')
}
});
//监控2个弹出层属性更改
observer.observe(document.querySelector('#createWork'), { attributes: true, childList: true, subtree: true })
observer.observe(document.querySelector('#updateWork'), { attributes: true, childList: true, subtree: true })
可以使用 jQuery UI 中的 resize 方法重新调整 dialog 的大小,以适应内容的宽度。当 select 选择栏出现滑动条时,可以监听 select 元素的 change 事件,然后在事件处理函数中调用 resize 方法来重新设置 dialog 的宽度。以下是一个示例代码:
// 初始化 dialog
$("#my-dialog").dialog({
width: "auto",
height: "auto",
resizable: false
});
// 监听 select 元素的 change 事件
$("#my-select").change(function() {
// 调用 resize 方法重新设置 dialog 的宽度
$("#my-dialog").dialog("option", "width", "auto").dialog("resize");
});
在这个示例中,我们假设 dialog 的 HTML 元素的 ID 是 my-dialog,而包含 select 元素的 HTML 元素的 ID 是 my-select。当 select 元素的内容发生变化时,会触发 change 事件,然后调用 dialog 的 resize 方法来重新设置宽度,以适应新的内容。为了让 dialog 宽度可以根据内容自适应,我们在初始化 dialog 时将 width 设置为 auto。
请注意,当 dialog 的大小发生变化时,可能需要重新调整其位置,以确保其居中。你可以使用 position 方法来实现这个目的。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!