1

検証後に入力フィールドにフォーカスを設定する際に問題が発生しました。

from と to の 2 つのフィールドがあります。

   <spring:message code="template.fields.label.from"/>: 
       <mvc:input  path="templateFields.selectorRangeFrom" 
       onchange="validateNumber('templateFields.selectorRangeFrom',true)"/>
   <spring:message code="template.fields.label.to"/>: 
      <mvc:input path="templateFields.selectorRangeTo"   
     onchange="validateNumber('templateFields.selectorRangeTo',true)"/>

そして、フィールドを検証し、フィールドが無効な場合は false を返し、そうでない場合は true を返すメソッド validateNumber() を持っています。ただし、フォーカスが無効な番号にとどまることはなく、常に次のオブジェクトに移動します。

function validateNumber(index,isInteger) {
 var object = document.getElementById(index);
 var value = object.value;   
 if (testNumeric2(value,isInteger)==false)   {
     alert('Please correct the value: ' + value);               
     object.focus();
     object.select();
     return false;  
 } 
return true;    
 }    

event.returnValue=false (false を返す前) を追加すると、IE で機能することがわかりました。しかし、Firefox の解決策が見つかりません。

提案をありがとう、マタリ

4

2 に答える 2

4

setTimeout()を使用すると、関数の実行を数ミリ秒遅らせることができます。ゼロを使用する場合、これは単に「現在行っていることをすべて終了したらすぐに実行する」ことを意味します。イベントの処理、あなたの場合。

これを試して:

if (! /** check field **/) {
   /** show error **/
   setTimeout((function() { object.focus() }), 0);
}

基本的には、入力ボックスにフォーカスする関数を作成し、イベントのデフォルトの処理が完了したらすぐに呼び出すようにブラウザに指示します。

于 2009-01-20T20:04:53.977 に答える
0

onChangeに対して false を返すことが何を意味するのかわかりません。問題の領域に焦点を合わせ直したいだけの場合は、setTimeout()呼び出しを介してこれを行うことをお勧めします (入力要素の周りにクロージャーを作成する必要があります)。

このようにして、テキスト ボックスにフォーカスしようとすると、イベント処理が完了します。

補足として、ユーザーにエラーを通知するためにalert()を使用しないことをお勧めします。これは耳障りであり、多くの Windows システムで予期しない耳障りな音を発生させる可能性があるためです。トラブル コントロールの横にアイコンを表示するか、トラブル コントロールの周りに赤い境界線を表示することは、おそらくユーザーを扱うためのはるかに優れた方法です。

于 2009-01-20T19:46:11.173 に答える