3

我目前正在尝试确保在文本框中输入的数字可被 1.25 或 1.5 整除。我决定天气将数字修改为 1.25 或 1.5 的方式取决于另一个下拉列表中的内容。例如:如果一个 DDL 的选定索引是 1,I mod by 1.5,如果是 2,I mod by 1.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 函数中有几个小错误。我已经对其进行了调试,以查看我必须设置的 Error-Span 的哪些属性。它是textContentFirefox 和innerTextIE 的属性。

工作功能(跨浏览器能力):

  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 中经历过),因为它也是一个自动变量,其中包含传递给函数的所有参数,因此如果 a参数的命名方式相同。我建议将参数名称更改为“args”或其他任何名称。

于 2013-04-12T09:50:18.943 回答