javascript - Materialise 中与预填充内容重叠的标签

标签 javascript jquery google-chrome-extension materialize autofill

<分区>

我想做的是填写一个使用 Materialize 的表单,但它发生的是书面内容只是与输入的占位符重叠,而不是实际从页面“接收”。 我使用的 JS 代码如下:

$("label[for='firstname']").addClass("active"); 
document.getElementById("firstname").value = "John";

因为在网络上我注意到许多用户解决了这个问题,将类“active”添加到输入的标签中,但这对我不起作用。

另外,当尝试使用

  $(document).ready(function() {
Materialize.updateTextFields();
  });

我在网页上收到一条错误消息,内容为“Uncaught ReferenceError: Materialize is not defined”。

还有其他方法可以解决这个问题吗?我正在使用 Chrome 扩展程序自动填充,但我无法通过使用 document.write 注入(inject)脚本来修改 html 页面内容。

编辑:

我还注意到,如果在输入字段中手动写入,输入的类来自

materialize-element-field ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength

materialize-element-field ng-valid-pattern ng-valid-minlength ng-valid-maxlength active ng-touched ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required

类标签根本没有改变。

输入框前还有如下div:

<div ng-class="['materialize-element',
                            {
                                'input-half left': true,                                
                                'materialize-textinput': true,
                                'materialize-password': false,
                                'materialize-textarea': false,
                                'materialize-select': false,
                                'materialize-number': false,
                                'materialize-checkbox': false,
                                'materialize-radio': false,
                                'materialize-block-radio': false,
                                'collapsed': !selectBoxExpanded['firstname'] &amp;&amp; false,
                                'expanded': selectBoxExpanded['first'] &amp;&amp; false,
                                'has-icon': false &amp;&amp; true,
                                'required': requiredField['ship.firstname'] || true,
                                'not-empty': !isModelEmpty(ship.firstname || form['ffirstname_46afgt3'].$$rawModelValue),
                                'valid': (isModelModified(form, 'firstname_46afgt3') &amp;&amp; form['firstname_46afgt3'].$valid) &amp;&amp; form['firstname_46afgt3'].$viewValue.length != 0,
                                'error': (isModelModified(form, 'firstname_46afgt3') &amp;&amp; form['firstname_46afgt3'].$invalid),
                                'disabled': false,
                                'has-counter': false
                            }]" ng-click="selectBoxExpanded['firstname']=!selectBoxExpanded['firstname']" ng-init="initField('ship', 'firstname', '', false)" class="materialize-element input-half left materialize-textinput required">

在我手动在输入中添加文本后,上面的 div 类更改为以下内容:

materialize-element input-half left materialize-textinput required not-empty valid

编辑2:

输入框在正文之前是这样的:

<input class="materialize-element-field ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern ng-valid-minlength ng-valid-maxlength" type="text" id="firstname" name="firstname_46afgt3" value="" maxlength="33" ng-pattern="/^[\u00C0-\u1FFF\u2C00-\uD7FF\u2019a-zA-Z\.\'\-\s]{1,}$/" ng-required="requiredField['ship.firstname'] || true" ng-model="ship.firstname" ng-init="validateField('firstname_46afgt3', true, 'W3sidHlwZSI6InJlcXVpcmVkIiwibGFiZWwiOiJmb3Jtcy5jaGVja291dC5kZWxpdmVyeS5tZXRhcGFjay5hZGRyZXNzLmZpcnN0bmFtZS5taXNzaW5nIiwiZGlzcGxheUxhYmVsIjoiSW5zZXJpc2NpIGlsIG5vbWUuIn0seyJ0eXBlIjoicGF0dGVybiIsImxhYmVsIjoiZm9ybXMuY2hlY2tvdXQuZGVsaXZlcnkubWV0YXBhY2suYWRkcmVzcy5maXJzdG5hbWUuaW52YWxpZCIsImRpc3BsYXlMYWJlbCI6IkNvbnRyb2xsYSBpbCBub21lLiJ9XQ==')" ng-keydown="ngKeyHandler($event)" ng-change="ngChangeHandler('firstname', 'firstname_46afgt3', false)" ng-trim="true" required="required">

然后这是我在里面写完文字后的样子:

<input class="materialize-element-field ng-valid-pattern ng-valid-minlength ng-valid-maxlength active ng-touched ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required" type="text" id="firstname" name="firstname_46afgt3" value="" maxlength="33" ng-pattern="/^[\u00C0-\u1FFF\u2C00-\uD7FF\u2019a-zA-Z\.\'\-\s]{1,}$/" ng-required="requiredField['ship.firstname'] || true" ng-model="ship.firstname" ng-init="validateField('firstname_46afgt3', true, 'W3sidHlwZSI6InJlcXVpcmVkIiwibGFiZWwiOiJmb3Jtcy5jaGVja291dC5kZWxpdmVyeS5tZXRhcGFjay5hZGRyZXNzLmZpcnN0bmFtZS5taXNzaW5nIiwiZGlzcGxheUxhYmVsIjoiSW5zZXJpc2NpIGlsIG5vbWUuIn0seyJ0eXBlIjoicGF0dGVybiIsImxhYmVsIjoiZm9ybXMuY2hlY2tvdXQuZGVsaXZlcnkubWV0YXBhY2suYWRkcmVzcy5maXJzdG5hbWUuaW52YWxpZCIsImRpc3BsYXlMYWJlbCI6IkNvbnRyb2xsYSBpbCBub21lLiJ9XQ==')" ng-keydown="ngKeyHandler($event)" ng-change="ngChangeHandler('firstname', 'firstname_46afgt3', false)" ng-trim="true" required="required">

似乎输入字段中的“值”标签根本没有被触及,如果我尝试从 Chrome 开发控制台手动编辑它,就会发生与自动填充相同的事情。

最佳答案

啊,如果我使用 last_name example ,我可以看到输入看起来如何覆盖占位符。它实际上不是占位符。它的标签位于输入区域内。当输入获得焦点时,它会将标签移动到上方。在没有获得焦点(或手动激活类)的情况下,标签保留在输入字段值所在的相同空间中。

对于您的 JS 错误,这表示未加载 Materialize 脚本。如果您在您所在的页面上打开控制台并输入 Materialize,它会返回 undefined 还是一个对象?如果未定义,则 Materialise 的 JS 不会应用于该页面。

如果它返回一个对象,我会在执行 Materialize 脚本之前检查您的脚本是否正在执行。

编辑:

我刚刚注意到 Materialise 通过 javascript 而不仅仅是 css 状态将“事件”类应用于标签。这表明 Materialise 脚本必须在页面上。你能提供你正在处理的页面的链接吗?

关于javascript - Materialise 中与预填充内容重叠的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40329956/

相关文章:

javascript - 使用 html5 和 javascript 在浏览器中显示交互式 2D 平面图

javascript - 使用 jQuery 通过 DOM 创建 SVG

javascript - 在下拉列表中存储值 - Ember.js

Javascript:类实例初始化与继承

javascript - 如何使 HTML <IMG> 根据鼠标移动滚动?

jquery - Web 应用程序上的 QUnit?

javascript - Chrome 扩展程序 : Uncaught SyntaxError: Unexpected token return

file - 隐身访问扩展文件

javascript - 如何在 Chrome 扩展中 Hook jquery 表单提交

javascript - 等待异步函数完成后再继续