在使用HTML5表單驗證,嘗試使用瀏覽器來檢測無效的意見/場,而不是重新發明輪子。
收聽invalid
事件,向您的表單中添加一個「invalid」類。隨着「無效」課程的添加,您可以使用CSS3 :pseudo
選擇器爲您的表單造型。
例如:
// where myformid is the ID of your form
var myForm = document.forms.myformid;
var checkCustomValidity = function(field, msg) {
if('setCustomValidity' in field) {
field.setCustomValidity(msg);
} else {
field.validationMessage = msg;
}
};
var validateForm = function() {
// here, we're testing the field with an ID of 'name'
checkCustomValidity(myForm.name, '');
if(myForm.name.value.length < 4) {
checkCustomValidity(
// alerts fields error message response
myForm.name, 'Please enter a valid Full Name, here.'
);
}
};
/* here, we are handling your question above, by adding an invalid
class to the form if it returns invalid. Below, you'll notice
our attached listener for a form state of invalid */
var styleInvalidForm = function() {
myForm.className = myForm.className += ' invalid';
}
myForm.addEventListener('input', validateForm, false);
myForm.addEventListener('keyup', validateForm, false);
myForm.addEventListener('invalid', styleInvalidForm, true);
現在,簡單的風格你的形式,你看我們根據附「無效」類適合。
例如:
form.invalid input:invalid,
form.invalid textarea:invalid {
background: rgba(255, 0, 0, .05);
border-color: #ff6d6d;
-webkit-box-shadow: 0 0 6px rgba(255, 0, 0, .35);
box-shadow: 0 0 6px rgba(255, 0, 0, .35);
}
「不以任何方式理想。」確實。有沒有一種方法可以在元素失去焦點後將樣式應用於有效的元素,而不是必需的內容?我還沒有找到一個這樣做的方法。 –
我可以想象一個(不存在的)pseduo類,用於像「提交」這樣的表單,以便它可以作爲任何包含輸入的父選擇器,如'#myform:submitted input:required:invalid'。因爲儘管目前這種情況確實是不直觀的,但期望CSS在特定情況下知道某個字段是無效的(爲什麼它不應該馬上這樣做,就其所知而言)並不現實?你真的想把輸入樣式與表單的狀態聯繫起來,而不是輸入本身(例如,當必填字段爲空並且提交父表單時)。 – Anthony
這個答案:https:// stackoverflow。com/questions/41619497/how-to-make-pseudo-class-invalid-apply-to-an-input-after-submit-a-form實際上處理這個問題,我想即使它需要一點javascript 。它只是添加一個「提交」到表單的類(就像我建議的那樣),以便樣式規則可以是'form.submitted input:required:invalid' – Anthony