You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JQuery中$("body").append()首次点击无效问题解决及原因分析

问题原因分析
  • 按钮触发的lightbox首次点击无效,核心原因是你在.focosBTN的点击事件里嵌套绑定了第二个同元素的点击事件:第一次点击按钮时,只会执行添加img-popup元素、绑定关闭事件的逻辑,此时负责弹窗显示的fadeIn事件还没绑定到按钮上,所以第一次点击没有显示效果;等第一次点击完成后,第二个点击事件才绑定成功,后续点击就能正常触发显示了。
  • 而.lightbox的两个点击事件是在document.ready里平行绑定的,第一次点击时两个事件会依次触发:第一个添加弹窗元素,第二个执行fadeIn,所以功能正常。
解决方案

把按钮的弹窗显示逻辑直接放到第一次点击的事件里,不要嵌套绑定新的点击事件,同时添加判断避免重复生成弹窗元素:

$(document).ready(function () {
    // BUTTON CLASS
    $(".focosBTN").click(function () {
        // 检查是否已存在弹窗,避免重复添加
        if ($(".img-popup").length === 0) {
            $("body").append("<div class='img-popup'></div>");
            $(".img-popup").click(function () {
                $(this).fadeOut(500, function () {
                    $(this).remove();
                }).addClass("lightboxfadeout");
            });
        }
        // 直接执行弹窗显示逻辑
        $(".img-popup").fadeIn(500);
    });

    // DIV CLASS
    $(".lightbox").click(function () {
        if ($(".img-popup").length === 0) {
            let imgsrc = $(this).find('.lightboxImg').attr('src');
            $("body").append("<div class='img-popup'><img src='" + imgsrc + "'></div>");
            $(".img-popup").click(function () {
                $(this).fadeOut(500, function () {
                    $(this).remove();
                }).addClass("lightboxfadeout");
            });
        }
        $(".img-popup").fadeIn(500);
    });
});
额外优化说明
  • 新增$(".img-popup").length === 0的判断,防止多次点击生成多个弹窗元素,减少不必要的DOM操作和重复事件绑定。
  • 关闭弹窗时用$(this)代替全局选择器,确保只操作当前被点击的弹窗,逻辑更严谨。

内容的提问来源于stack exchange,提问作者Kup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:49:12