3

現在、テキストボックスに入力された数値が1.25または1.5で割り切れることを確認しようとしています。天気を1.25または1.5で変更する方法は、別のドロップダウンリストの内容によって異なります。例:DDLの選択されたインデックスが1の場合、I mod x 1.5、2 I modx1.25の場合。

ただし、エラーがスローされた理由をユーザーに表示する必要があります。カスタムバリデーターのエラーメッセージは、「数値は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>
4

2 に答える 2

5

大文字と小文字の区別(feIsValidValue)に応じて、JavaScript関数にいくつかの小さな間違いがありました。エラースパンのどのプロパティを設定する必要があるかを確認するためにデバッグしました。これはFirefoxとIEのtextContent属性でした。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;
                }
        }
    }
于 2011-01-04T22:40:58.343 に答える
4

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

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

于 2013-04-12T09:50:18.943 に答える