Javascript 砌体不使用动态内容

Javascript 砌体不使用动态内容,javascript,jquery,html,css,jquery-masonry,Javascript,Jquery,Html,Css,Jquery Masonry,我的动态内容无法使用砌体,我不知道为什么。我不认为这是我的一个错误,至少我已经看了几个小时的代码了,我找不到任何不工作的东西 //reads listbox.php and cycles through the array calling createbox function listboxs() { $.ajax({ url: '_php/listbox.php', success: function (output) { va

我的动态内容无法使用砌体,我不知道为什么。我不认为这是我的一个错误,至少我已经看了几个小时的代码了,我找不到任何不工作的东西

//reads listbox.php and cycles through the array calling createbox
function listboxs() {
    $.ajax({
        url: '_php/listbox.php',
        success: function (output) {

            var jsonArray = $.parseJSON(output);

            $.each(jsonArray, function (i, box) {
                createbox(box.id, box.name, box.link, box.description, box.tags);
            });
        }
    });
}

//create the code for 1 box
function createbox(id, name, link, description, tags) {

    var boxHtml = "",
        tagsHtml = "",
        descriptionHtml = "";

    boxHtml = '' + '<div class="box" id="' + id + '">' + '<div class="boxinfo">' + '<label class="boxname"><a href="' + link + '" class="boxlink" target="_blank">' + name + '</a></label>';

    $.each(tags, function (i, tag) {
        tagsHtml += '<label class="boxtag">' + ((!tag.name) ? tags[i] : tag.name) + '</label>';
    });

    //if(description.trim().length > 0){
    descriptionHtml = '<textarea class="boxdescription" readonly rows="1">' + description + '</textarea>';
    //}

    boxHtml += tagsHtml + '</div>' + descriptionHtml + '</div>';

    $content.html($content.html() + boxHtml);
}
我对所有这些都非常着迷,因为我测试了在内容中手动创建框(这意味着用html编写),如果我做得好的话。如果我通过你在那里看到的函数创建它们,它就不起作用了。。。声明所有变量后,我在javascript文件的开头调用listboxs


希望我说的很清楚,你能帮助我。

你应该使用
附加的
方法。发件人:

添加并布置新添加的项目元素

看看这个

尝试将代码更改为

boxHtml += tagsHtml +
        '</div>' +
    descriptionHtml +
'</div>';

var $boxHtml = $(boxHtml);

$content.append($boxHtml).masonry('appended', $boxHtml);
boxHtml+=tagsHtml+
'' +
描述HTML+
'';
var$boxHtml=$(boxHtml);
$content.append($boxHtml).massey($append',$boxHtml);

加起来就是格林的答案:

您还应该将数据组合选项='{“columnWidth”:200,“itemSelector”:“.item”}应用于#容器

<div id="content" class="js-masonry" data-masonry-options='{ "columnWidth": 200, "itemSelector": ".item" }'></div>


像这样。这可能有助于您的评论回复。我没有代表回答作为评论。

这确实有效,但我想砖石工程似乎并没有真正正确地应用。两个div的位置不正确,它们彼此稍微重叠。我已经测试了将$content.mashise()应用于按钮的点击操作,然后它会正确地放置它们。有什么想法吗?我还在listBoxs()中的每个循环之后放置了$content.mashise(),但什么也没有发生。有趣的是,如果我只是放大/缩小我的页面,它就会正确地放置div。你的盒子里有图像吗?或者你可能对它们应用了一些java脚本转换(比如uniform等)?砌体使用基于项目大小的绝对定位。所以,如果大小稍有变化,就会导致重叠。阅读更多。这似乎确实有效,但如果我将宽度改为50,它仍然有效,而60则无效。不过,谢谢你,砖石的行为真的很奇怪。
boxHtml += tagsHtml +
        '</div>' +
    descriptionHtml +
'</div>';

var $boxHtml = $(boxHtml);

$content.append($boxHtml).masonry('appended', $boxHtml);
<div id="content" class="js-masonry" data-masonry-options='{ "columnWidth": 200, "itemSelector": ".item" }'></div>