Raz*_*fir 1 javascript css svelte
在 Svelte 应用程序中,我有一个带有简单验证的表单。
<form id="surveyForm" class="mt-4">
<div class="form-group">
<input type="text" class="form-control" placeholder="First name">
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Last name">
</div>
<button class="btn btn-full" on:click={Continue}>Continue</button>
</form>
Run Code Online (Sandbox Code Playgroud)
import {fly, fade} from 'svelte/transition';
let hasError = false;
let errMessage = "";
let isSuccessVisible = false;
function validateInput() {
var surveyForm = document.getElementById('surveyForm'),
inputFields = surveyForm.querySelectorAll('input[type=text]');
hasError = false;
inputFields.forEach(function(field) {
field.classList.remove("is-invalid");
var inputFieldVal = field.value;
if (inputFieldVal.length == 0) {
field.classList.add("is-invalid");
hasError = true;
}
});
errMessage = "All the fileds are mandatory";
}
function Continue(e) {
e.preventDefault();
validateInput();
if (hasError == false) {
isSuccessVisible = true;
setTimeout(function() {
isSuccessVisible = false;
}, 3000);
}
}
Run Code Online (Sandbox Code Playgroud)
为了给无效的表单字段一个红色边框,我使用border: 1px solid #c00 !important
:
.error-alert {
border: 1px solid #c00 !important;
color: #c00;
}
Run Code Online (Sandbox Code Playgroud)
The class is-invalid
is correctly added (and removed), yet, the default global.css
styles overwrite my component-level styles, as you can see in this REPL.
Why does this happen? What is a reliable fix?
NOTE: The case described is a simplified one, in reality I might need other validations, like making sure the value is numeric. The solution I have to implement is not a very specific one.
在 REPL 中,您会看到以下警告:
未使用的 CSS 选择器 (87:1)
那是因为.is-invalid
在标记中的任何地方都没有使用选择器——如果一个类名没有被使用,Svelte 会告诉你它并删除它。为了让 Svelte 能够“看到”它,它必须在标记中——你不能用classList
. (这是一项功能,而不是错误:以编程方式操作 DOM 将不可避免地导致您的视图与您的状态不同步。)
但是,在这种情况下,您不需要向输入元素添加类,也不需要在函数内部进行检查。您可以只使用输入的required
属性和:invalid
CSS 选择器:
<input type="text" class="form-control" placeholder="First name" required>
Run Code Online (Sandbox Code Playgroud)
input:invalid {
border: 1px solid #c00;
}
Run Code Online (Sandbox Code Playgroud)
该:invalid
用户提交的任何数据之前,因此,您可能要加个班,指示用户是否已经尝试已经提交国家将被应用:
<form id="surveyForm" class="mt-4" class:submitted>
<div class="form-group">
<input type="text" class="form-control" placeholder="First name" required>
</div>
<!-- ... -->
</form>
Run Code Online (Sandbox Code Playgroud)
.submitted input:invalid {
border: 1px solid #c00;
}
Run Code Online (Sandbox Code Playgroud)
添加该类的最简单方法是在click
按钮上的事件处理程序中。
使用您在 HTML 中免费获得的内容还有其他好处。例如,只要存在验证错误,表单就不会提交(验证不限于“必需”——您可以指定特定模式,或使用例如type="email"
要求有效的电子邮件地址等),这意味着在您的submit
事件处理程序中,您已经知道输入是有效的。
归档时间: |
|
查看次数: |
629 次 |
最近记录: |