テキストボックスがautopostback = true
あり、それを検証する JavaScript 関数があります。JavaScript 関数も値が OK のときに少しフォーマットを行いますが、PageRequestManager の add_beginRequest や add_initializeRequest から呼び出すと、処理後に値が変更されます。これどうやってするの?
まず、リクエストを制御します。
try {
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
}
catch (e) { }
次に、検証関数を呼び出すハンドラーを用意し、必要な種類の検証を渡します。precallbackvalidation は私のカスタム検証関数であり、エラーが発生した場合は部分的なポストバックを拒否しますが、検証に問題がなければ、検証関数はテキストボックス内に何らかのフォーマットを既に作成しており、ポストバック後に失われます。
function InitializeRequest(sender, args) {
if (typeof precallbackvalidation == 'function') {
if ($(args._postBackElement).attr("PreCallBackIndex") != null) {
if (!precallbackvalidation(args._postBackElement)) {
args.set_cancel(true);
}
}
}
}
JavaScript でテキストをフォーマットし、ポストバック後に失われないようにする方法を知りたいです。
<asp:textbox ID="txtRut" runat="server" MaxLength="13" size="13" Width="75px" TabIndex="1" AutoPostBack="true" PreCallBackIndex="rutcte" ></asp:textbox>
私のページには、検証をトリガーする属性と検証関数を含むテキストボックスがあります。
function precallbackvalidation(obj) {
var index = $(obj).attr("PreCallBackIndex");
if ($(obj).length > 0) {
switch (index) {
case 'rutcte':
return ValidarTipo('rut', obj, true);
break;
case 'ptjegastos':
if (ValidarTipo('entero', obj)==false) {
if (ValidarTipo('real', obj)==false) {
return false;
}
}
return true;
break;
case 'ptjemargen':
if (ValidarTipo('entero', obj) == false) {
if (ValidarTipo('real', obj) == false) {
return false;
}
}
return true;
break;
case 'ptjeppm':
if (ValidarTipo('entero', obj) == false) {
if (ValidarTipo('real', obj) == false) {
return false;
}
}
return true;
break;
case 'ptjecomision':
if (ValidarTipo('entero', obj) == false) {
if (ValidarTipo('real', obj) == false) {
return false;
}
}
return true;
break;
default:
return true;
break;
}
}
else {
return true;
}
}
The ValidarTipo
(またはValidateTypes
英語で) は、'rut' オプションのフォーマットを行う JavaScript の汎用関数です。ただし、すべてのプロセスが終了すると、その形式は失われます
テキストボックス内に「19」と書くと、JavaScript 関数はこのテキストを「1-9」にフォーマットしますが、リクエストプロセスがbeginrequest
orの後に続くinitializerequest
と、AJAX プロセスは JavaScript の変更をクリアし、テキストを「 19"