我正在使用ajax工具包的ValidatorCalloutExtender在文本框上显示错误消息。 ValidatorCalloutExtender正在验证文本框的RegularExpressionValidator上进行扩展。我遇到的问题是我需要动态更改ValidationExpression和ErrorMessage,具体取决于选择了与文本框关联的下拉列表项。我能够使用客户端事件和javascript成功完成此操作但是我似乎无法使ValidatorCalloutExtender更新正确显示的ErrorMessage。令我困惑的是这在Firefox中工作得很好,但我似乎无法让它在任何版本的IE中工作。如果有人可以帮我找到一种方法来获取我显示的动态更改的错误消息,那将非常感激。
答案 0 :(得分:3)
大家好,
我想出了自己的问题,并认为如果其他人试图做一些与我类似的事情,我可能会把我的发现放在这里。
在javascript中,我将与文本框绑定的regularexpressionvalidator的对象传递给一个函数,该函数将根据下拉列表中的值更改正则表达式和错误消息。如果用户更改了下拉列表值,我希望验证器和ajax validatorcallout立即更新,并告诉用户文本框中的值现在有效或者无效但是由于这个新原因。我不是说这是最好的方法,但这是对我有用的方式,我想在客户端上做。
下面是我正在使用的代码,(val)是传入的regularexpressionvalidator对象。
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的工作方式与我测试过的其他浏览器的工作方式不同!如果有人有更好的方法,请分享,我希望这个答案可以帮助一些人!
由于