html 需要登录用户名或电子邮件字段,无需验证

qyswt5oh  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(67)

我有一个简单的登录表单,其中包含用户名/电子邮件和密码字段,以及两个按钮,一个用于正常登录,另一个用于LDAP登录。正常登录需要email/pwd,而LDAP登录需要用户名/pwd
我已经有了它的工作与输入文本字段,但我发现,输入电子邮件有助于移动的用户有一个专门的键盘与@和。作为捷径。
实现移动的友好键盘的最简单方法是什么?我的想法是以某种方式使用input-email并禁用验证,但我仍然希望保持自动的“必需”验证

<div class="form-floating">
    <input required autofocus type="text" class="form-control" 
    id="username" name="username" placeholder="username or email">
    <label for="username">username or email</label>
</div>

字符串
为了最终结果的目的,忽略bootstrap:)

b0zn9rqh

b0zn9rqh1#

将初始类型设置为电子邮件(具有用户友好键盘的优点),并相应地将按钮单击时的类型更改为文本/电子邮件,以在需要时删除对提交的限制:

<form>
<div class="form-floating">
    <input required autofocus type="email" class="form-control" 
    id="username" name="username" placeholder="username or email">
    <label for="username">username or email</label>
</div>
<input type="submit" value="normal" onclick="document.getElementById('username').setAttribute('type','email')">
<input type="submit" value="LDAP" onclick="document.getElementById('username').setAttribute('type','text')">
</form>

字符串

mm5n2pyu

mm5n2pyu2#

Ali Sheikhpour的解决方案将显示无效消息,当您在空白字段中按Enter键,然后继续键入:
x1c 0d1x的数据
因此,方向可以是在影子DOM中模仿电子邮件输入。适用于移动的Chrome。应该为Firefox/Safari进行调整。


const shadow = $email.attachShadow({ mode: "open" });
const email = document.createElement('input');
email.type = 'email';
email.required = true;

const style = getComputedStyle($username);
const keys = Object.keys(style).filter(key => key.match(/\D/));

Object.assign(email.style, {
  ...Object.fromEntries(keys.map(key => [key, style[key]])),
  position: 'absolute',
  backgroundColor:'transparent'
});

email.addEventListener('input', e => $username.value = email.value);

setTimeout(() => email.focus());

$username.setAttribute('tabindex', '-1');

Object.assign($username.style, {
  pointerEvents: 'none',
});

shadow.appendChild(email);

$form.addEventListener('submit', e => {
  e.preventDefault();
  const data = new FormData($form);
  
  console.log(...data);
});
.form-control{
  padding: 5px 10px;
  border-radius: 4px;
  margin-bottom:5px;
}
<form id="$form">
<div id="$input" class="form-floating">
    <span id="$email"></span>
    <input id="$username" required autofocus type="text" class="form-control" 
    placeholder="username or email" name="username">
    <label for="$username">username or email</label>
    <div>
    <input id="password" required type="password" class="form-control" 
    placeholder="password" name="password">
    <label for="password">username or email</label>
    </div>
</div>
<button>Login</button>
</form>

相关问题