5

おそらく10個のフィールドを持つフォームがあります。これらのフィールドの 1 つはチェックボックスであり、デフォルトではチェックされていません。フォームのいくつかのフィールドは、そのボックスがチェックされている場合にのみ有効で必須です。ValidatorEnable(requiredFieldValidator, true) を呼び出してこれを処理する方法を見つけることに成功しました (この件に関する多数の StackOverflow の質問を確認しました)。

 function toggleStatus() {
          if ($('#ctl00_main_chkContactMe').is(':checked')) {
              $('#elementsToOperateOn :input').removeAttr('disabled');
              $('#elementsToOperateOn label').removeClass('off');
              ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], true);
              ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], true);
          } else {
              $('#elementsToOperateOn :input').attr('disabled', true);
              $('#elementsToOperateOn label').addClass('off');
              ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], false);
              ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], false);
          }
      }

ただし、まだ対処されていない問題があります。ユーザーがボックスをチェックして、フィールドが有効になり必須になると、バリデーターはすぐに「このフィールドは必須です」というメッセージを発します。これは、ユーザーが何かを入力する前の状態であるため、ユーザー エクスペリエンスはあまり良くありません。バリデーターを有効にしているにもかかわらず、「このフィールドにはまだフォーカスがありません。誰かが意図的に空のままにしておくまでエラーメッセージを表示しないでください」と認識させるにはどうすればよいですか?

4

3 に答える 3

13

私は同じ問題を抱えていて、このコードを使用して解決しました:

var myValidator = document.getElementById('<%=myValidator.ClientID %>');
ValidatorEnable(myValidator, true);
myValidator.isvalid = true;
ValidatorUpdateDisplay(myValidator);

3 行目は少し奇妙に見えるかもしれませんが、バリデーターは後で変更やページ外への投稿時に検証されます。

この機能を試すこともできます:

function myValidatorEnabler(validator, enable) {   
    validator.enabled = enable;
    ValidatorUpdateDisplay(validator);
}
于 2011-06-16T08:29:36.087 に答える
0

送信の直前まで有効にしないでください。RegisterOnSubmitStatementを使用して呼び出されるjavascript関数を使用する代わりに、送信時に有効にできるはずです。検証afaikの前に起動します。

http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registeronsubmitstatement.aspx

これにより、投稿する手間が省けます。

于 2011-06-14T13:38:43.090 に答える
0

デフォルトで、必須フィールドバリデーターが有効になっていることを確認してください(そうでない場合は有効にしてください)。したがって、無効にする必要がある条件のみを使用してください。

于 2013-02-08T09:42:30.627 に答える