何かが見つからない限り、これはChromeのバグのようです。ChromeでJavaScriptを使用して必要なプロパティを削除したときにcheckValidity()がfalseになる
ここには2つの無線要素を持つ3つの形式があります。必須の属性がない場合、フォームのcheckValidity()は期待どおりtrueを返します。必要な属性がある場合、フォームのcheckValidity()は、期待どおりにfalseを返します。
ただし、JavaScriptで必要な属性が削除されると、checkValidity()はfalseを返します。これは私が期待するものではありません。任意の説明/回避策が評価されました!これはSafariとFirefoxで正しく動作し、Chromeでは動作しません。
console.log('Valid form: ' + document.getElementById('validForm').checkValidity());
console.log('Invalid form: ' + document.getElementById('invalidForm').checkValidity());
//document.getElementById('rad1').required = false; //Neither this nor below work
//document.getElementById('rad2').required = false;
document.getElementById('rad1').removeAttribute('required');
document.getElementById('rad2').removeAttribute('required');
console.log('Should be valid form: ' + document.getElementById('shouldBeValidForm').checkValidity());
<form id="validForm">
<input type="radio" name="my radio 1" value="option 1">
<input type="radio" name="my radio 1" value="option 2">
</form>
<form id="invalidForm">
<input type="radio" name="my radio 2" value="option 1" required>
<input type="radio" name="my radio 2" value="option 2" required>
</form>
<form id="shouldBeValidForm">
<input id="rad1" type="radio" name="my radio 3" value="option 1" required>
<input id="rad2" type="radio" name="my radio 3" value="option 2" required>
</form>
あなたはすでに私のために 'checkValidity removeAttribute' https://www.google.com/?q=checkValidity+removeAttribute – trex005
作品のためにGoogleで最初の結果です。 Chromium 51.0.2674.0 – Oriol
興味深い。私は49.0.2623.87にあり、他の49.xxユーザーも同じ結果を確認しています。それにもかかわらず、古いブラウザを使用しているユーザーをサポートする必要があるため、回避策が残っています。入力をJSで完全に再描画する以外のアイデアはありますか? – AllTheCodez