2011-11-27 13 views
17

フォーム/サブミットコンテキストの外部でHTML5クライアント側の検証を使用しようとしていますが、検証エラーのバブルを表示する方法がわかりません。次のことを考えてみましょう:HTML5クライアント側の検証エラーのバブルをプログラムで表示する方法

<input type="text" id="input" pattern="[0-9]" required oninvalid="alert('yes, invalid')"> 
<button onclick="alert(document.getElementById('input').checkValidity())">Check</button> 

すべてが期待通りcheckValidityから返される正しい値で、動作し、無効なイベントが送信され、表示されているが、どのように私はプログラム的に検証エラーのバブルが表示されていますか?

答えて

5

あなたがこのバブルの話をしている場合:

Validation bubble in Firefox

この回答への参照ScottRさんのコメントの代わりに。

...そして私のテストは、FirefoxとChromeの両方がないスタンドアロンの要素( testcase)に > <フォーム( testcase)に包まれた要素に checkValidity を呼び出したときにそれを表示するが、ことを示しています。

フォームがない場合は表示する仕組みがないようで、という仕様は、プログラムのcheckValidity呼び出し(要素またはフォーム上)に応答して表示する必要があります。形。

実際には送信しない場合でも、要素をフォームにラップしてください。

さらに、独自の検証UIを使用すると、この未指定領域のブラウザの将来の変更を防ぐことができます。

+0

ありがとうございます。 ** checkValidityが呼び出されたときに、要素上であろうとフォーム上であろうと、気泡は表示されません**。 onsubmitイベントと一緒にフォームが送信されたときにのみ表示されるように見えます(実際にイベントが送信されないように、ハンドラからfalseを返すことができます)。 –

+4

この受け入れられた回答は正しくありません。 Chrome 19,20、および21は、 'element.checkValidity()'を呼び出すときに検証バブルを表示しません。ユーザーがフォームを送信したボタンをクリックすると、エラーの最初の要素にはバブルで示されたエラーが表示されます。 –

+0

@ScottR:修正された答えのテストケースを参照してください。なぜ私は答えが正しいとは思わないのか分かりません。 – Nickolay

-1

誤ったフィールドに手動で「無効」属性を手動で設定します。 小規模の例:

var form = $('#myForm').get(0); 
if(typeof formItem.checkValidity != 'undefined' && !formItem.checkValidity()) { 
    $('input:required').each(function(cnt, item) { 
     if(!$(item).val()) { 
      $(item).attr('invalid', 'invalid'); 
     } 
    }); 
    return false; 
} 
関連する問題