【发布时间】:2018-06-09 22:12:41
【问题描述】:
我正忙着为办公室里不太熟悉 Bootstrap 的同事编写一些辅助函数 - 它采用基本的 html 并为他们创建引导布局。
在这种情况下,我试图制作一个合理的单选按钮水平列表。
一个例子是:
<fieldset data-type="horizontal" data-bootstrap="radiogroup">
<label>
<input type="radio" name="g1" value="default" data-bind="checked: true"/>Recent
</label>
<label>
<input type="radio" name="g1" value="order" data-bind="checked: false"/>By Number
</label>
<label>
<input type="radio" name="g1" value="advanced" data-bind="checked: false"/>Advanced
</label>
</fieldset>
我在链接到此页面的打字稿文件中执行了一些 JQuery - 代码如下:
function layoutUnwrappedBootstrapControls() {
$("*[data-bootstrap='radiogroup']")
.each((index, element) => {
var listOfRadioButtons = $(element).find('label').clone();
$(element).children().remove();
$(element)
.append("<div class='btn-group col-lg-12 col-md-12 col-sm-12 col-xs-12 clearfix' data-toggle='buttons'></div>");
$(element)
.children(":first")
.append(listOfRadioButtons)
.find("label")
.addClass("btn btn-primary")
.css("width", (100 / listOfRadioButtons.length) + '%');
$(element).children(":first").button().button('refresh'); //< the issue
});
}
产生:
<div class="btn-group col-lg-12 col-md-12 col-sm-12 col-xs-12 clearfix" data-toggle="buttons">
<label class="btn btn-primary" style="width: 33.3333%;">
<input type="radio" name="g1" value="default" data-bind="checked: true" data-mini="true" data-theme="h" id="tz15" checked="checked">Recent
</label>
<label class="btn btn-primary" style="width: 33.3333%;">
<input type="radio" name="g1" value="order" data-bind="checked: false" data-mini="true" data-theme="h" id="tz16">By Number
</label>
<label class="btn btn-primary" style="width: 33.3333%;">
<input type="radio" name="g1" value="advanced" data-bind="checked: false" data-mini="true" data-theme="h" id="tz17">Advanced
</label>
</div>
在页面上,这似乎很好。然而,我遇到的问题是 data-toggle='buttons' 部分 - 它告诉我引导程序运行一些代码以初始化单选按钮列表 - 而且它似乎与动态创建的按钮组不兼容。
我重新初始化按钮组的尝试不起作用。单选按钮仍然保持静态 - 不会在标签上换出“活动”,并在输入上“检查”。
欺骗性的部分是:我无法使用相同的代码在 JSFiddle 上重现我的问题!它在 JSFiddle 上按预期工作:JSFiddle
如何强制重新初始化动态创建的按钮组?
【问题讨论】:
-
确保包含 bootstrap js 文件。您可以看到 JSFiddle 包含 jquery 、 bootstrap.css 和 bootstrap.js 。如果您不包含 bootstrap.js,则控制台中不会出现错误,这就是您可能错过它的原因。
-
不,它在我的项目中
-
data-bind是干什么用的?那是为了像淘汰赛这样的另一个图书馆吗?如果没有实际重现您的问题的演示,很难提供帮助 -
澄清一下:一切看起来是否正常(视觉上)但没有您期望的数据(即未检查),还是看起来也有问题?
-
@knetsi,将您的评论作为答案。我想把赏金奖励给你。事实证明,在我们的框架内,我们有一个
.bootstrap.js - 这让我很困惑。这不是 Twitter 引导程序。我从来没有见过脚本加载一次——这就是导致头痛的原因。从 cdn 添加脚本 - 并且繁荣,上面的代码工作。但请注意:有一个加载顺序。 jQuery Mobile/jQueryUI 和 JQuery 必须在引导之前加载,这样代码才能工作,否则会导致冲突。显而易见的解决方案是最难发现的......
标签: javascript jquery html twitter-bootstrap