我发现了一个bug。jQuery似乎不能在HTML渲染后改变它的弹出窗口的数据位置。
的例子:
$('[data-toggle=popover],[rel=popover]').popover();
<? if (isset($labels) && $labels): ?>
<div id="<?= $id ?>" class="product-labels leak-image-click">
<? foreach($labels as $label): ?>
<a class="product-label cursor-pointer" data-label="<?= $label ?>" tabindex="0" data-toggle="popover" role="button" data-trigger="focus" <?= $label == "soldout" ? "data-soldout-target='".$soldout."'" : "" ?>>
</a>
<? endforeach ?>
</div>
<? endif ?>
labels.init = function(id) {
$('#' + id).children(".product-label").each( function() {
var labelName = $(this).data("label"),
placement = meventi.getViewSize() == "xs" ? "right" : "top",
options = {
"placement": "top"
};
$(this).attr("data-content", labels.descriptions[$(this).data("label")]);
$(this).addClass("product-label-" + labelName );
$(this).attr("data-placement", "left");
$(this).popover(options).popover("show");
$(this).click(function(e){
$(e.target).popover("show");
});
});
};
然后我使用jQuery来改变数据的位置,当页面加载。append_slot("js")
来自Symfony框架。
<? append_slot("js") ?>
meventi.labels.init("<?= $id ?>");
<? end_slot() ?>
当在Chrome开发者工具中查看HTML元素时,我可以看到该元素显示为data-placement="top"
,但是弹出窗口仍然出现在左边,就像它最初设置的
"doge"没有找到类,你需要"。doge"。
尝试改变
$("doge").attr("data-placement", "top");
$(".doge").attr("data-placement", "top");
当然不行,你有打字错误,没有附加处理程序。
$(document).ready(function(){
$(".doge").attr("data-placement", "top");
});
明白了!
在声明数据位置$(this).attr("data-placement", "left");
$('[data-toggle=popover],[rel=popover]').popover();
的弹出窗口改变数据内容如meventi.labels.descriptions[$(this).data("label")]);
等数据可以在$('[data-toggle=popover],[rel=popover]').popover();
之后调用
你也可以通过jQuery的data()方法来编辑数据属性:
$(".doge").data("placement", "top");