Pevent CSS 内容 属性 将被删除
Pevent CSS content property to be removed
我有一个表格可以检查用户的密码强度。它工作正常并根据验证显示文本。但是当用户犯错并使用退格键重新输入密码时,data-text
中的文本不再显示,因为 CSS 中的 content
属性 是被删除(我猜是因为退格键)。我找不到防止它被删除的解决方案。
// Password field
self.addEventListener("keyup", () => {
let val = self.value;
testPasswordStrength(val);
});
// check password strength
const testPasswordStrength = (value) => {
const strengthText = document.getElementsByClassName('js-password-strength')[0];
const strongRegex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[=/\()%ยง!@#$%^&*])(?=.{8,})'
),
mediumRegex = new RegExp(
'^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})'
);
if (value) {
if (strongRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textGood);
return "medium";
} else {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textDefault);
return "weak";
}
} else {
strengthText.classList.add("d-none");
}
};
content: attr(data-validation-text);
<div class="js-password-strength" data-validation-text data-text-default="Password must be 8+ characters" data-text-good="Good password" data-text-strong="Great password">
</div>
这个作品适合你吗
// Password field
const passwordField = document.getElementsByClassName('js-password-strength')[0];
passwordField.addEventListener("keyup", () => {
let val = passwordField.textContent;
testPasswordStrength(val);
});
// check password strength
const testPasswordStrength = (value) => {
;
const strongRegex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[=/\()%ยง!@#$%^&*])(?=.{8,})'
),
mediumRegex = new RegExp(
'^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})'
);
if (value) {
if (strongRegex.test(value)) {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textGood);
return "medium";
} else {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textDefault);
return "weak";
}
} else {
passwordField.classList.add("d-none");
}
};
.js-password-strength{
border:1px solid #000;
}
.js-password-strength:after{
content: attr(data-validation-text);
font-size:12px;
color:#666;
}
<html>
<head>
</head>
<body>
<div class="js-password-strength"
data-validation-text
data-text-default="Password must be 8+ characters"
data-text-good="Good password"
data-text-strong="Great password" contenteditable=true>
</div>
</body>
<html>
@AndrewL64 我发现了问题 strengthText.classList.add("d-none");
它使它显示 none。所以它删除了内容属性。所以如果设置了值。它应该有 display: block
if (value) {
strengthText.classList.remove("d-none");
strengthText.classList.add("d-block");
if (strongRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textGood);
return "medium";
} else {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textDefault);
return "weak";
}
} else {
strengthText.classList.remove("d-block");
strengthText.classList.add("d-none");
}
我有一个表格可以检查用户的密码强度。它工作正常并根据验证显示文本。但是当用户犯错并使用退格键重新输入密码时,data-text
中的文本不再显示,因为 CSS 中的 content
属性 是被删除(我猜是因为退格键)。我找不到防止它被删除的解决方案。
// Password field
self.addEventListener("keyup", () => {
let val = self.value;
testPasswordStrength(val);
});
// check password strength
const testPasswordStrength = (value) => {
const strengthText = document.getElementsByClassName('js-password-strength')[0];
const strongRegex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[=/\()%ยง!@#$%^&*])(?=.{8,})'
),
mediumRegex = new RegExp(
'^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})'
);
if (value) {
if (strongRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textGood);
return "medium";
} else {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textDefault);
return "weak";
}
} else {
strengthText.classList.add("d-none");
}
};
content: attr(data-validation-text);
<div class="js-password-strength" data-validation-text data-text-default="Password must be 8+ characters" data-text-good="Good password" data-text-strong="Great password">
</div>
这个作品适合你吗
// Password field
const passwordField = document.getElementsByClassName('js-password-strength')[0];
passwordField.addEventListener("keyup", () => {
let val = passwordField.textContent;
testPasswordStrength(val);
});
// check password strength
const testPasswordStrength = (value) => {
;
const strongRegex = new RegExp(
'^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[=/\()%ยง!@#$%^&*])(?=.{8,})'
),
mediumRegex = new RegExp(
'^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})'
);
if (value) {
if (strongRegex.test(value)) {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textGood);
return "medium";
} else {
passwordField.setAttribute('data-validation-text', passwordField.dataset.textDefault);
return "weak";
}
} else {
passwordField.classList.add("d-none");
}
};
.js-password-strength{
border:1px solid #000;
}
.js-password-strength:after{
content: attr(data-validation-text);
font-size:12px;
color:#666;
}
<html>
<head>
</head>
<body>
<div class="js-password-strength"
data-validation-text
data-text-default="Password must be 8+ characters"
data-text-good="Good password"
data-text-strong="Great password" contenteditable=true>
</div>
</body>
<html>
@AndrewL64 我发现了问题 strengthText.classList.add("d-none");
它使它显示 none。所以它删除了内容属性。所以如果设置了值。它应该有 display: block
if (value) {
strengthText.classList.remove("d-none");
strengthText.classList.add("d-block");
if (strongRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textStrong);
return "strong";
} else if (mediumRegex.test(value)) {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textGood);
return "medium";
} else {
strengthText.setAttribute('data-validation-text', strengthText.dataset.textDefault);
return "weak";
}
} else {
strengthText.classList.remove("d-block");
strengthText.classList.add("d-none");
}