当内容被Backbone.js替换时,如何解锁jquery ui检查按钮
How to unlock a jquery ui check button when content is replaced with Backbone.js?
我有一个替换内容的web应用程序。此内容具有jquery ui检查按钮。当我替换内容时,如果按钮已经存在,那么不要再添加它:
if(!$('label[for=checkWeekM]').hasClass('ui-button'))
$('.checkWeek').button();
如果我按下按钮(它的状态被选中),如果我替换内容,按钮将开始锁定,直到相同的内容再次被替换。
我使用Backbone.js来替换内容
jsfiddle
如何解锁检查按钮?
您正在复制id
属性,这会导致糟糕的HTML,糟糕的HTML会导致沮丧,沮丧会导致愤怒,等等。
你的模板中有这个隐藏在<div>
:中
<input type="checkbox" class="checkWeek" id="checkWeekM" />
<label for="checkWeekM">L</label>
然后将相同的HTML插入到.content-central
中。现在,您的页面中有两个具有相同id
属性的元素和两个指向它们的<label>
元素。当您添加jQueryUI按钮包装器时,您最终会得到一个稍微修改过的<label>
版本,作为复选框的可见元素;但是,<label>
将通过for
属性与两个DOM元素相关联,并且一切都会分崩离析。
解决方案是停止使用<div>
来存储模板。如果使用<script>
,浏览器将不会将内容解析为HTML,也不会有重复的id
属性。类似这样的东西:
<script id="template-central-home" type="text/x-template">
<div data-template-name="">
<input type="checkbox" class="checkWeek" id="checkWeekM" />
<label for="checkWeekM">L</label>
</div>
</script>
然后这个访问HTML:
content.view = new ContentView({
model: content,
template: $('#template-' + template_name).html()
});
演示:http://jsfiddle.net/ambiguous/qffsm/
这里有两个快速的教训:
- 拥有有效的HTML非常重要
- 不要将模板存储在隐藏的
<div>
s中,而是将它们存储在具有text/html
以外的type
属性的<script>
s中,这样浏览器就不会试图将它们解释为HTML
在您提到这个问题后,我详细查看了您的小提琴。我在这里建议的解决方案更像是一个快速解决方案。
如果你想遵循正确的方法来避免长期的问题和副作用,你应该考虑这里提到的内容。这样你的问题就解决了,而且没有其他错误。
相关文章:
- Meteor-在一段时间内解锁模板(按日期)
- 解锁英特尔xdk中的屏幕
- 如何解绑 jquery on('click','selector') 事件
- 在视口调整大小时完全从 DOM 解绑 Jquery 插件
- jQuery blockUI 不会解锁
- 当页面保留在DOM中时,如何使用开/关正确解绑Jquery-Mobile中的事件
- 在网站上使用Javascript检测解锁屏幕
- 解锁流星注销并登录
- 如何锁定&解锁jqGrid
- 将jQuery Readonly设置为定时解锁
- jQuery通过点赞解锁内容
- 选中/未选中复选框时锁定/解锁文本输入
- 当鼠标向下时锁定滚动条,当鼠标向上时解锁
- 为教育形式创造可解锁的内容
- Segoe用户界面锁定解锁符号符号在AppBar
- 我怎么能把它发送到特定的链接时,一些滑动解锁
- 如何正确地解嵌jquery javascript函数
- 为什么元素的解锁会失败?
- 实现锁定&在编辑时解锁文档
- 当内容被Backbone.js替换时,如何解锁jquery ui检查按钮