document.addEventListener('click', function (e) { // 判断点击的元素是否为 layer.tips 的目标元素或其子元素 if (!e.target.matches('.layui-layer-Tips') && !e.target.closest('.layui-layer-Tips')) { // 关闭所有的 layer.tips layer.closeAll('tips'); } }); 你这个方法tips点开开没有看见就被关闭了
时间: 2024-02-14 09:15:02 浏览: 140
如果您的 `layer.tips` 点开后就立即被关闭了,可能是因为点击事件冒泡导致的。尝试在点击 `layer.tips` 目标元素时阻止事件冒泡,以避免触发页面的点击事件监听器。具体实现方式如下:
```javascript
// 给页面添加一个点击事件监听器
document.addEventListener('click', function (e) {
// 判断点击的元素是否为 layer.tips 的目标元素或其子元素
if (!e.target.matches('.layui-layer-Tips') && !e.target.closest('.layui-layer-Tips')) {
// 关闭所有的 layer.tips
layer.closeAll('tips');
}
});
// 给 layer.tips 的目标元素添加一个点击事件监听器
document.addEventListener('click', function (e) {
// 阻止事件冒泡
e.stopPropagation();
});
```
这段代码中,我们给 `layer.tips` 的目标元素添加了一个点击事件监听器,并在其中调用了 `e.stopPropagation()` 方法,用于阻止事件冒泡。这样一来,当用户点击 `layer.tips` 目标元素时,就不会触发页面的点击事件监听器,也就不会关闭 `layer.tips` 了。
相关问题
$('#Tips2').on("click", function () { layer.tips('提示:如果展示的报表格式和导出的不同,需配置导出报表格式', '#Tips2', { tips: 3, success: function (layero) { // 添加点击事件监听器 document.addEventListener('click', function (e) { // 判断点击的元素是否为 layer.tips 的目标元素或其子元素 if (!e.target.matches('.layui-layer-Tips') && !e.target.closest('.layui-layer-Tips')) { // 关闭所有的 layer.tips layer.closeAll('tips'); } }); } }); $(".layui-layer-tips .layui-layer-content").attr({'style': "opacity: 0.8;left: -47%;font-size: 14px !important;"}) $(".layui-layer-TipsG.layui-layer-TipsB").attr({'style': " right: 12px;left: auto;width: 0;top: -13px !important;left: 48% !important;height: 0;border-left: 7px solid transparent;border-right: 7px solid transparent;border-bottom: 7px solid black;transform: rotate(0deg) !important;"}) }) 为何立即被关闭了
您的代码中给 `#Tips2` 元素添加了一个 `click` 事件监听器,在点击 `#Tips2` 元素时会显示一个 `layer.tips`。在 `layer.tips` 的 `success` 回调函数中添加了一个点击事件监听器,用于关闭所有的 `layer.tips`。但是,由于您在添加点击事件监听器时没有等待 `layer.tips` 加载完成,因此很可能会出现立即被关闭的情况。
为了避免这种情况,您可以在 `layer.tips` 的 `end` 回调函数中添加点击事件监听器,确保 `layer.tips` 加载完成后再添加监听器。具体实现方式如下:
```javascript
// 给 #Tips2 元素添加一个点击事件监听器
$('#Tips2').on("click", function () {
// 显示 layer.tips,并在显示完成后添加点击事件监听器
layer.tips('提示:如果展示的报表格式和导出的不同,需配置导出报表格式', '#Tips2', {
tips: 3,
success: function (layero) {
// 在 end 回调函数中添加点击事件监听器
layero.end(function () {
document.addEventListener('click', function (e) {
// 判断点击的元素是否为 layer.tips 的目标元素或其子元素
if (!e.target.matches('.layui-layer-Tips') && !e.target.closest('.layui-layer-Tips')) {
// 关闭所有的 layer.tips
layer.closeAll('tips');
}
});
});
}
});
$(".layui-layer-tips .layui-layer-content").attr({'style': "opacity: 0.8;left: -47%;font-size: 14px !important;"});
$(".layui-layer-TipsG.layui-layer-TipsB").attr({'style': " right: 12px;left: auto;width: 0;top: -13px !important;left: 48% !important;height: 0;border-left: 7px solid transparent;border-right: 7px solid transparent;border-bottom: 7px solid black;transform: rotate(0deg) !important;"});
});
```
这段代码中,我们在 `layer.tips` 的 `success` 回调函数中添加了一个 `end` 回调函数,并在其中添加了点击事件监听器,用于关闭所有的 `layer.tips`。由于 `end` 回调函数会在 `layer.tips` 关闭后执行,因此可以确保 `layer.tips` 加载完成后再添加监听器。
// 监听页面点击事件 window.addEventListener('click', function (event) { // 判断用户点击的元素是否是提示框的目标元素 if (!event.target.matches('.layui-layer-tips')) { // 如果不是,则关闭当前打开的提示框 layer.closeAll('tips'); } }); $('#Tips').on("click", function () { let html = ''; html += "<div class='Tips_boxs'><div class='Tips_box_dot'></div><div>合并列中的字段,无法拖入表格,需选中表格内区域,手动进行绑定</div></div>"; html += "<div class='Tips_boxs'><div class='Tips_box_dot'></div><div>非合并单元格,可通过右下方”字段列表“,拖入到表格内</div></div>"; layer.tips(html, '#Tips', { tips: 3, }); $(".layui-layer-tips .layui-layer-content").attr({'style': "left: 29%;font-size: 14px !important;min-height: 120px !important;color: rgba(0, 0, 0, 0.8);background-color:#fff;padding:20px !important"}) $(".layui-layer-TipsG.layui-layer-TipsB").attr({'style': " right: 12px;left: auto;width: 0;top: -13px !important;left: 65% !important;height: 0;border-left: 7px solid transparent;border-right: 7px solid transparent;border-bottom: 7px solid black;transform: rotate(0deg) !important;"}) }) 这个方法被立即关闭了
根据你提供的代码,可能是因为你在点击 `#Tips` 元素时弹出了一个 layer.tips 提示框,但是在点击页面空白处时立即关闭了这个提示框,导致看上去这个方法没有生效。
如果你想让这个方法正常工作,可以将 `window.addEventListener` 中的判断逻辑更改为判断当前页面是否有打开的提示框。例如:
```javascript
// 监听页面点击事件
window.addEventListener('click', function(event) {
// 判断当前页面是否有打开的提示框
if (document.querySelector('.layui-layer-tips')) {
// 如果有,则关闭当前打开的提示框
layer.closeAll('tips');
}
});
```
这样,当你在点击 `#Tips` 元素时弹出提示框,然后点击页面空白处时才会触发上面的事件监听器关闭提示框。
阅读全文