提问人:neurodynamic 提问时间:8/20/2015 更新时间:11/5/2019 访问量:21972
当通过 javascript 填充输入框时,使具体化标签移出输入框
Make materialize labels move out of input box when input box is filled via javascript
问:
通常,使用 Materialize 时,文本输入框的标签会显示在输入框内,直到用户输入选择该框并在其中输入文本。但是,当通过 javascript 填充框的值时,标签不会移开。它保留在框中并与输入的文本重叠。有没有办法用 javascript 触发标签转换,这样就不会发生这种情况?
答:
标签转换行为是通过将类添加到标签的元素来触发的。因此,如果您让 javascript 除了填写字段之外将该类添加到标签中(例如),标签将过渡到字段之外,就像用户操作选择时一样。active
$('label').addClass('active')
使用 JQuery,您可以使用 $('#yourInputText').change();
评论
更具体地说,如果您在启用了 turbolinks 的 Rails 中使用 Materialize,您会发现预填充了非空值的 Materialize 表单字段在页面加载时处于活动状态。
以下方法对我有用:
$(function() {
M.updateTextFields();
});
它将为相应的标签和前缀图标添加类。'active'
评论
M.updateTextFields();
当 turbolinks 工作时,该事件只会触发一次,因此您需要点击 turbolinks 加载事件。document.ready
它发生得如此之快,以至于如果您想查看动画,请将其包装在一个很小的超时中。
带超时/可见动画
document.addEventListener('turbolinks:load', () => {
setTimeout(() => {
M.updateTextFields();
}, 100);
});
无超时/可见动画
document.addEventListener('turbolinks:load', () => {
M.updateTextFields();
});
使用 Turbolinks 的 Rails 5 和 Materialize CSS 1.0.0
添加到与输入字段关联的标记中。class="active"
label
如果您使用的是旧版本 (0.x) 的 Materializecss,请使用:
Materialize.updateTextFields();
而不是:
M.updateTextFields();
如果使用标签,则将使用:
$("label[for='idTag']").addClass('active');
对于任何在 ReactJS 中寻找解决方案的人:
- 将输入的 value 属性链接到组件状态中的某个值。(例如:value={this.state.name})
- 将该行添加到组件的 lifeCycle 方法中。
document.M.updateTextFields()
componentDidMount()
当需要将某些值预填充到表单中时,上述解决方案会有所帮助。(例如:更新详细信息表单)
评论