ajax ツールキットの ValidatorCalloutExtender を使用して、テキスト ボックスにエラー メッセージを表示しています。ValidatorCalloutExtender は、テキスト ボックスを検証している RegularExpressionValidator で拡張されています。私が抱えている問題は、テキストボックスに関連付けられているドロップダウンリスト項目が選択されていることに応じて、ValidationExpression と ErrorMessage を動的に変更する必要があることです。クライアント側のイベントと JavaScript を使用してこれを正常に行うことができましたが、適切に表示される ErrorMessage を ValidatorCalloutExtender に更新させることができないようです。私をさらに混乱させているのは、これが Firefox では正常に動作することですが、IE のどのバージョンでも動作するようには見えません。表示されるエラーメッセージを動的に変更する方法を誰かが見つけるのを手伝ってくれれば、大歓迎です。
2925 次
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 に答える