注:据我所知,该问题不是以下问题的重复问题:
给定一个字段:
模式
属性,例如对于4个字符的十六进制字符串输入设置了“[a-f,0-9]{4}”
下面是一个示例,说明了这一点:
/* jshint esnext: true */
const form = document.querySelector("#form");
const field = document.querySelector("#field");
const output = document.querySelector("#output");
form.addEventListener('submit', (e) => {
console.log("SUBMIT");
output.textContent = field.value;
e.preventDefault(); // Prevent default POST request
});
field.oninvalid = (event) => {
console.log("INVALID");
event.target.setCustomValidity('must be valid 4 hex characters');
}
field.oninput = (event) => {
console.log("INPUT");
event.target.setCustomValidity('');
}
Output: <span id="output">No output</span>
<form id="form">
<label for="field">Enter 4 character hex code: </label>
<input id="field" type="text" pattern="[a-f,0-9]{4}" autocomplete=off>
</form>
验证工作几乎与预期一样,除非用户输入无效条目,然后继续尝试并编辑它,其以下输入状态仍然无效:
此时,既不使用在oninvalid
中定义的自定义setCustomValidity
消息,也不使用在onInput
中定义的空消息。
相反,只要字段处于无效状态且不模糊,默认的请与请求的格式匹配
消息出现。
这到底是怎么回事?在控制台中,每次都调用
onininin
事件,因此每次都调用event.target.setCustomValality('');
。
那么,为什么我们仍然看到通用的默认验证消息呢?不应该
setCustomValidity(“”)
禁用它吗?
此处可接受的答案应显示以下内容:
参数
字段用于验证。
- 当且仅当用户试图提交无效字段时,而不是当他们随后立即修改输入时,任何验证消息都会出现。
- 默认的
请匹配请求的格式。
消息永远不会出现。
当多个输入组合无效时,将使用setCustomValality。这就是为什么它必须在之后手动重置为空字符串。其他方面,应该使用title属性。
编辑输入后试图隐藏验证错误是可以理解的,但这违背了HTML5的形式哲学。只要输入无效,就应该显示它。
添加maxlong可以帮助用户不越过上限。
如果您真的希望您的要点得到满足,请不要使用HTML5表单验证,而是使用自定义的东西。
因此,即使setCustomValidity设置为空字符串,也会显示工具提示的原因是,根据模式属性,输入元素仍然无效。
<form id="form">
<label for="field">Enter 4 character hex code: </label>
<input id="field" type="text" pattern="[a-f,0-9]{4}" maxlength="4" minlength="4" autocomplete="off" title="must be valid 4 hex characters">
</form>
JS
const form = document.querySelector("#form");
const field = document.querySelector("#field");
const output = document.querySelector("#output");
form.addEventListener('submit', (e) => {
console.log("SUBMIT");
output.textContent = field.value;
e.preventDefault(); // Prevent default POST request
});
field.oninvalid = (event) => {
console.log("INVALID");
}
field.oninput = (event) => {
console.log("INPUT");
}
这似乎是windows中Chrome 65的一个bug。
使用setCustomValality(")
中的onindin
应该禁用输入上出现的默认验证消息。
以下变通方法适用于我:
/* jshint esnext: true */
const form = document.querySelector("#form");
const field = document.querySelector("#field");
const output = document.querySelector("#output");
const pattern = field.getAttribute("pattern");
form.addEventListener('submit', (e) => {
console.log("SUBMIT");
output.textContent = `User submitted: ${field.value}`;
e.preventDefault(); // Prevent default POST request
});
field.oninvalid = (event) => {
console.log("INVALID");
event.target.setCustomValidity('must be valid 4 hex characters');
}
field.oninput = (event) => {
console.log("INPUT");
event.target.setCustomValidity('');
event.target.removeAttribute("pattern");
}
field.onchange = (event) => {
console.log("CHANGE");
event.target.setAttribute("pattern", pattern);
}
Output: <span id="output">No output</span>
<form id="form">
<label for="field">Enter 4 character hex code: </label>
<input id="field" type="text" pattern="[a-f,0-9]{4}" autocomplete=off>
</form>
我对iOS布局约束的机制有误解。请参阅下面列出的我放在viewDidLoad中的代码。 在我看来,我的意图是明确的。我想在设备屏幕的中央看到一个按钮。但我只能看到下面的图片。 我在项目控制台中有一个输出,非常可怕,我无法从中理解任何东西。 无法同时满足约束。可能以下列表中至少有一个约束是您不想要的。尝试以下方法:(1)查看每个约束,并尝试找出您不期望的约束;(2) 查找添加了一个或多个不需要的约束
问题内容: 我有一个带有关系的实体,我想通过一个查询来检索它,因此使用。有时,Hibernate不尊重它,而是发出N + 1 秒。随着 有时 我的意思是,因为我不知道是什么触发它,我有案件对不同的查询,这可能发生,或者不一样的类。 这是带有我使用的注释的简化实体: 用 我希望单个查询能够同时获取其及其内容,例如 相反,我得到了第一选择所有N S和那么N 献给所有S(考虑没有缓存)。 我发现了许多类
问题内容: 与这两个帖子@iMohammad有关, 在单击JButtonJava时使用JButton增加/减少textArea内的字体大小并在单击JButton Java时更改字体样式 …,我面临着一个非常有趣的问题,该问题来自于on 作为参数传递屏幕 请如何动态调整大小取决于,与我在sscce中尝试过的另一个JComponent正常工作一样 问题答案: 我调试了您的SSCCE,并且传递给的值为空
null 对于第二个选项,我使用MessageHandler: 每当我的模型(函数)返回适当的标记时,我想输入其中一个ConversationHandlers,但不知道如何执行。
我已经用FilesystemMetadataProvider基于此实现了:https://github.com/vdenotaris/spring-boot-security-saml-sample 为了使 SSL 握手适用于工件绑定,我必须将 IDP 的 CA 证书放在 keyManager 使用的 java 密钥库中。 我宁愿使用jre上的cacerts,以防IDP更改CA,但是我还没有找到任