【问题标题】:How do I add dynamic content to a div generated dynamically?如何将动态内容添加到动态生成的 div 中?
【发布时间】:2012-04-09 10:59:26
【问题描述】:

基本上我正在验证一个表单,我正在收集错误消息并将它们附加到动态生成的 div 中。现在我无法将这些消息附加到这个 div。这就是我所做的

//generates a div onclick of submit button
$("body").append("<div class='overlay'><div class='errorContainer'>.html(errorMsg)</div><div>`<a href='javascript:void(0);' class='cross'>X</a><div></div>");

.html(errorMsg)这会导致错误/不正确

function closeErrorBox() {
            var errorMsg = "";
                var ferrorMsg =  "Please say your first name" + "<br>";
                var aerrorMsg = "Please type address" + "<br>";
                var eerrorMsg = "Please type a valid email Address" + "<br>"
                if($("#name").val() == "") {
                    errorMsg += ferrorMsg;
                }
                if($("#address").val() == "") {
                    errorMsg += aerrorMsg;
                }
                if($("#email").val() == "") {
                    errorMsg += eerrorMsg;
                }

                $(".errorContainer").html(errorMsg);


                $(".overlay").remove();
                }

【问题讨论】:

    标签: javascript jquery html dynamic-content


    【解决方案1】:

    .errorContainer div 位于 .overlay div 内。当您在函数末尾删除覆盖时,errorContainer 也会被删除。除此之外,.html(errorMsg) 似乎工作正常(如果仍然导致错误,请说明发生了什么问题)。

    重新阅读您的问题,我无法理解您的程序流程:您是否在已知错误时添加该 div,并在单击“X”时将其关闭?如果是这样的话,我建议做这样的事情:

    var errorMsg = "";
    var ferrorMsg =  "Please say your first name" + "<br>";
    var aerrorMsg = "Please type address" + "<br>";
    var eerrorMsg = "Please type a valid email Address" + "<br>"
    if($("#name").val() == "") {
        errorMsg += ferrorMsg;
    }
    if($("#address").val() == "") {
        errorMsg += aerrorMsg;
    }
    if($("#email").val() == "") {
        errorMsg += eerrorMsg;
    }
    
    // Adapting Diego's answer:
    $("<div class='overlay'><div class='errorContainer'></div><div><a href='javascript:void(0);' class='cross'>X</a><div></div>")
        .appendTo($("body"))
        .find(".errorContainer")
            .html(errorMsg)
            .end()
        .find(".cross")
            .click(function(e) {
                e.preventDefault();
                $(this).closest(".overlay").remove();
            });
    

    【讨论】:

    • 这看起来很有希望,但我有一个问题,每次我点击提交按钮时,它都会添加一个覆盖。你会用代码消除这个问题吗?谢谢
    • 不,不会。如果你只想要一个叠加层,我建议不要动态创建它,而是静态创建它(把它放在你的 html 中)。让它开始隐藏 (style="display:none"),在提交时显示它 ($(".overlay").show()) 并在 .cross 的点击 ($(".overlay").hide()) 中隐藏它。这样可以避免不必要地附加/删除它。
    • 它不起作用,firebug 说 errorMsg 没有在 .html(errorMsg) 行中定义
    • 这可能是您其余代码的一些问题。您可以看到我提出的解决方案 here 的一个工作示例。如果您仍有问题,请使用更多信息更新您的问题。
    • 毫无疑问我改变了我的代码,但这是我现在所拥有的,它并没有 woek jsfiddle.net/G9rxp/4,我真的很感谢你在这方面的帮助
    【解决方案2】:

    我想你的意思是:

    //generates a div onclick of submit button
    $("body").append("<div class='overlay'><div class='errorContainer'></div><div><a href='javascript:void(0);' class='cross'>X</a><div></div>").find(".errorContainer").html(errorMsg);
    

    【讨论】:

    • 如果有多个.overlay,页面中的所有.errorContainer都会收到相同的错误信息。我建议在新创建的 div 上使用 appendTo,而不是在 body 上使用 append(因此 find 将仅限于该 div)。
    • 谢谢,但每次我点击提交按钮时,都会添加叠加层。我该如何避免它。我的意思是只添加一次覆盖
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多