0

我正在使用 ajax 工具包的 ValidatorCalloutExtender 在文本框上显示错误消息。ValidatorCalloutExtender 在验证文本框的 RegularExpressionValidator 上进行扩展。我遇到的问题是我需要根据已选择与文本框关联的下拉列表项来动态更改 ValidationExpression 和 ErrorMessage。我能够使用客户端事件和 javascript 成功地做到这一点,但我似乎无法让 ValidatorCalloutExtender 更新正确显示的 ErrorMessage。更让我困惑的是这在 Firefox 中运行良好,但我似乎无法让它在任何版本的 IE 中运行。如果有人可以帮助我找到一种方法来获取显示为动态更改的错误消息,我们将不胜感激。

4

1 回答 1

3

大家好,

我想出了自己的问题,并认为如果其他人试图做与我类似的事情,我可能会将我的发现放在这里。

在 javascript 中,我将绑定到文本框的正则表达式验证器的对象传递给一个函数,该函数将根据下拉列表中的值更改正则表达式和错误消息。如果用户更改了下拉列表值,我希望验证器和 ajax 验证器调用立即更新,并且要么告诉用户文本框中的值现在有效,要么由于这个新原因而无效。我并不是说这是最好的方法,但这是对我有用的方法,我想在客户端上做。

下面是我正在使用的代码, (val) 是传入的正则表达式验证器对象。

function setSearchRegEx(val)
{
    var regExpression = "";
    var valMessage = "Must be in the following format: ";
    var message = "";

    // set regex information depending on what drop down value they select.
    switch (document.getElementByID('ddlValue1.ClientID').value) {
        case "Value1":
            regExpression = "^[a-zA-Z0-9'*\s-]{1,75}$";
            message = valMessage + "[A-Z][0-9]'. #-";
            break;
        case "Value2":
            regExpression = "^\[0-9]{3}-\[0-9]{2}-\[0-9]{4}|\d{9}$";
            message = valMessage + "999-99-9999";
            break;
        case "Value3":
            regExpression = "[a-zA-Z0-9'*\s-]{1,50}$";
            message = valMessage + "[A-Z][0-9]'. #-";
            break;
        case "Valu4":
            regExpression = "^\[0-9]{3}-\[0-9]{3}-\[0-9]{4}$";
            message = valMessage + "999-999-9999";
            break;
        case "Value5":
            regExpression = "^[0-9]{1,10}$";
            message = valMessage + "9999999999";
            break;
        default:
            regExpression = "";
            message = "";
    }
    // set validation control values for the new drop down selected.
    val.validationexpression = regExpression;
    val.errormessage = message;
    val.title = message;

    // fire the validation function to validate what is currently in the textbox
    val.isvalid = val.evaluationfunction(val);
    //call the function to manipulate the UI
    validatorUpdateDisplay(val);
}

function validatorUpdateDisplay(val)
{
    if (val.isvalid) {

        //make the error invisible
        val.display = "none";
    }
    else {

        var browser = navigator.appName;

        //different browsers get updated differently, IE really the only main one to update differently.
        if (browser == "Microsoft Internet Explorer") {
            val.ValidatorCalloutBehavior._errorMessageCell.innerText = val.errormessage;
        }
        else {
            val.ValidatorCalloutBehavior._errorMessageCell.textContent = val.errormessage;
        }

        //make the error visible
        val.display = "inline";
    }          
}

如您所见,Internet Explorer 的工作方式与我测试过的其他浏览器的工作方式不同!如果有人有更好的方法,请分享,我希望这个答案能帮助一些人!

谢谢

于 2009-07-08T20:40:02.967 回答