2011-01-04 4 views
3

現在、テキストボックスに入力された数値が1.25または1.5で割り切れることを確認しようとしています。私が1.25または1.5の数値を変更する天気を決定する方法は、別のドロップダウンリストにあるものに依存します。例:DDLの選択されたインデックスが1の場合、I modは1.5であり、I modが1.25である。ダイナミックErrorMessageを使用したカスタムバリデータ

しかし、エラーがスローされた理由をユーザーに表示する必要があります。カスタムバリデータのエラーメッセージは、 "Number is devisible 1.25"でなければなりません。

私はコードがうまくいくはずです。しかし、それはしません。別のフォーラムで、ソースを取得し、innerTextのエラーメッセージをトリックする必要があると読んでいます。しかし、私はどこかで何か間違ったことをしているに違いない。私は私のjavascriptの機能をステップ実行すると、完全にステップします。エラーメッセージは表示されません。ここに私のコードは次のとおりです。

<asp:CustomValidator ID="ValidateFinHeight" runat="server" CssClass="NormLabel" 
Display="Dynamic" 
ControlToValidate="txtFinHeight" 
ClientValidationFunction="validateFinHeight"></asp:CustomValidator> 

<script type="text/javascript" language="javascript" > 
function validateFinHeight(source, arguments) 
{ 
    var ddl = document.getElementById('cboTubeDia'); 
    var ddlSelIndex = ddl.selectedIndex 

    switch(ddlSelIndex) 
    { 
    case 0: 
     arguments.isValid = true; 
     return;  
    case 1: 
     if(arguments.value%1.25 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.25"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    case 2: 
     if(arguments.value%1.5 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.5"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    } 
} 
</script> 
+0

selectedindexが2の場合は1.25、selectedindexが1の場合は1.5ですが、javascript関数ではその逆を検証します。あなたの質問の答えには重要ではありません。 –

答えて

5

JavaScriptの機能のいくつかのマイナーな間違いが大文字と小文字の区別(。f.e IsValidValue)に応じてありました。私はそれをデバッグして、Error-Spanのどのプロパティを設定する必要があるかを確認しました。 Firefoxの場合はtextContent、IEの場合はinnerTextでした。

ワーキング機能(対応クロスブラウザ):

function validateFinHeight(source, args) { 
     var ddl = document.getElementById('cboTubeDia'); 
     var ddlSelIndex = ddl.selectedIndex; 
     var errorMsg = ""; 

     switch (ddlSelIndex) { 
      case 0: 
       args.IsValid = true; 
       return; 
      case 1: 
       if (args.Value % 1.25 != 0) { 
        errorMsg = "Height must be divisibly by 1.25"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
      case 2: 
       if (args.Value % 1.5 != 0) { 
        errorMsg = "Height must be divisibly by 1.5"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
     } 
    } 
+3

非常に非常にありがとう! – Johnrad

+0

jQueryにクロスブラウザ問題を残してみませんか?ちょうど$(src) – KMX

4

申し訳ありませんが、ゲストとして他の回答をコメントすることはできません。質問とティムの問題の答えを指摘したいと思います。

「引数」をパラメータ名として使用すると、問題が発生する可能性があります(少なくともFireFox 20ではこれを経験しました)。自動変数には関数に渡されるすべての引数が含まれているため、パラメータの名前が同じ場合は名前が競合します。私は 'args'または何か他のものにパラメータ名を変更することをお勧めします。

+1

+1を使用してください私はそれに応じて私の答えを編集しました。ありがとう。 –

関連する問題