与Dojo验证一起使用时,Chrome 41密码保存选项错误

时间:2015-04-01 21:38:04

标签: javascript google-chrome dojo

当提供记住密码时,Chrome的“保存密码”功能显然是一个简单的选择:它查看DOM中先前输入字段的值,并提供将密码键入该值。所以如果你有这个用户名/密码组合:

<form>
    <input value="myname" />
    <input value="mypassword" />
</form>

浏览器将提供在“myname”键下保存密码“mypassword”。

这在使用Dojo ValidationTextBox时会出现问题,因为Dojo解析器会插入一个不可见的INPUT控件,该控件包含一个用作验证图标的字符“X”(简化的HTML视图):

<form>
    <div>
        <input value="X" />
        <input value="myname" />
    </div>
    <div>
        <input value="X" />
        <input value="mypassword" />
    </div>
</form>

在这种情况下,Chrome会以“X”的名义记住“mypassword”,这很尴尬。

是否可以在Chrome中覆盖此行为?或者我们是否需要在Dojo中重写此功能?

2 个答案:

答案 0 :(得分:3)

name属性添加到验证小部件:

this.username = new ValidationTextBox({ name: 'username' });
this.password = new ValidationTextBox({ name: 'password' });

或以声明的方式:

<input type="text" name="username" data-dojo-type="dijit/form/ValidationTextBox" />
<input type="text" name="password" data-dojo-type="dijit/form/ValidationTextBox" />

这将生成具有名称属性的节点,Chrome可以使用这些属性将值与键相关联。您的简化HTML视图将如下所示:

<form>
    <div>
        <input value="X" />
        <input name="username" value="myname" />
    </div>
    <div>
        <input value="X" />
        <input name="password" value="mypassword" />
    </div>
</form>

答案 1 :(得分:0)

我已经弄清楚如何让它发挥作用。当您将name属性与适当的值(用户名,密码)一起使用时,用户名值将是密码输入之上的输入值。

1。使用表单

覆盖您的字段
<form method="post">
<input type="text" autocomplete="username" data-dojo-props="selectOnClick: true, uppercase: true" data-dojo-type="dijit/form/ValidationTextBox" required="required" />
</form>

2。使用值“username”和“password”

为输入字段添加自动填充功能
<input type="text" autocomplete="username" data-dojo-props="selectOnClick: true, uppercase: true" data-dojo-type="dijit/form/ValidationTextBox" required="required" />
<input type="password" autocomplete="password" data-dojo-props="selectOnClick: true, uppercase: true" data-dojo-type="dijit/form/ValidationTextBox" required="required" /> 

3。添加提交按钮或只是常规按钮

<input type="submit" value="send" />

请参阅fiddle