【发布时间】:2020-05-16 07:12:33
【问题描述】:
我在我的应用程序中使用input type=email。在此之前在旧系统开发人员用户input type=text。最近我被要求修复我的代码中的“问题”。用户在输入字段中输入电子邮件地址时报告的问题,最后输入了空白空间。然后用户尝试Save 表单,并在电子邮件字段This field is mistyped 下显示错误消息。我想知道type=email 是否应该这样工作并防止电子邮件地址字段中出现空白?
我在 Chrome 中测试过这个问题,不会检测到空白,但在 Firefox 中会检测到并且会显示错误消息。
$("#save").on("click", function() {
console.log(verifyFields('my-form'));
if (verifyFields('my-form')) {
alert('Saved!');
}
});
function verifyFields(containerID, includeInvisible) {
includeInvisible = includeInvisible || false;
let isValid = true;
const hdlMap = {
//'valueMissing': "This field is required",
//'patternMismatch': "This field is invalid",
'tooLong': "This field is too long",
'rangeOverflow': "This field is greater than allowed maximum",
'rangeUnderflow': "This field is less than allowed minimum",
'typeMismatch': "This field is mistyped"
};
const arrV = Object.keys(hdlMap);
const invalidInputs = [];
$("#" + containerID).find("input,textarea,select").each(function() {
var curItem$ = $(this);
var errMsg = [];
var dispfld = curItem$.data("dispfld");
var label = curItem$.data("label");
if (includeInvisible || curItem$.is(":visible")) {
if (curItem$[0].validity.valid) {
curItem$.removeClass("is-invalid");
return;
}
if (curItem$[0].validity['valueMissing']) {
var reqMsg = label ? label + " field is required" : "This field is required";
errMsg.push(reqMsg);
}
if (curItem$[0].validity['customError'] && dispfld) {
errMsg.push(dispfld);
}
if (curItem$[0].validity['patternMismatch'] && dispfld) {
errMsg.push(dispfld);
}
arrV.forEach(function(prop) {
if (curItem$[0].validity[prop]) {
errMsg.push(hdlMap[prop]);
}
});
if (errMsg.length) {
if (!curItem$.next().is(".invalid-feedback")) {
curItem$.after('<div class="invalid-feedback"></div>');
}
curItem$.addClass("is-invalid").next().text(errMsg.join(' and '));
invalidInputs.push(curItem$);
isValid = false;
} else {
curItem$.removeClass("is-invalid");
}
}
});
if (invalidInputs.length) {
invalidInputs[0].focus();
}
return isValid;
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="my-form" id="my-form">
<input type="email" name="user-email" id="user-email" required>
<button type="button" id="save">Save</button>
</form>
【问题讨论】:
-
好吧,如果 Firefox 和 Chrome 的行为不同,那么不管任何标准,如果你想同时支持这两种浏览器,你必须自己处理任何差异。例如,您可以在保存之前修剪字符串。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…你甚至可以直接修剪输入字段中的值。
标签: javascript html html-email