jquery click里的for循环,点击两次数据才会出现在页面上

发布于 2022-09-13 00:48:56 字数 812 浏览 15 评论 0

点击一次的效果
image.png
点击两次的效果
image.png

$('#printAll').on('click', function(e){
        let printData=data1
        var div = $("#printAllList");
        for(var i=0;i<printData.length;i++){
            console.log(123,printData[i])
            var printSingel="<div id='printPageAll'>"
            +"<div id='printPage' class='print"+i+"'>"
            +"<div id='bcTarget' class='targetList"+i+"'></div>"
            +"</div>"
            +"</div>"
            $(".targetList" + i).text(printData[i].sku);
            e.preventDefault();
            div.append(printSingel)
        }
        
    });

第一遍console.log就能打印出来数据,但是页面没能展示

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

枕头说它不想醒 2022-09-20 00:48:56

$(".targetList" + i) 这玩意点第一遍的时候不存在啊,点第二遍的时候可以是因为第一遍添加上了

生寂 2022-09-20 00:48:56

你这串代码的问题有点多哦
1.for循环添加多个元素,虽然在当前情况这个i可以不要,不过可能后续还有功能,建议var换成let
2.var printSingel放在了循环体里面,意味着每次都是新的变量,建议放循环体外部
3.每次循环都append,意味着资源消耗极大,建议循环体里面只做元素的拼接,循环结束后一次性append
4.$(".targetList" + i).text(printData[i].sku);也没有必要在循环体内找到元素又去修改text,直接把printData[i].sku拼接在对应字符串节点上就行了,一是为了效率,二是没有append的情况下根本找不到指定元素
5.click事件是可以多次执行的,建议添加节流
6.循环体内添加e.preventDefault()只会影响性能

逆蝶 2022-09-20 00:48:56
$('#printAll').on('click', function(e){
        let printData=data1
        $("#printAllList").append(printData.map(function(item, i){
            return "<div id='printPageAll'>"
            +"<div id='printPage' class='print"+i+"'>"
            +"<div id='bcTarget' class='targetList"+i+"'>" + item.sku +"</div>"
            +"</div>"
            +"</div>";
       }).join(''));
       e.preventDefault();
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文