我有一个带autopostback = true
的文本框,我有一个JavaScript函数来验证它。当值为OK时,JavaScript函数也会执行一些格式化,但是当我从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;
}
}
ValidarTipo
(或英语中的ValidateTypes
)是JavaScript中的通用函数,它执行'rut'选项的格式;但是在所有过程结束后,该格式将丢失
当我在文本框中写“19”时,JavaScript函数将此文本格式化为“1-9”,但是当请求过程在beginrequest
或initializerequest
之后继续时,AJAX过程似乎清除了JavaScripts的修改,让我的文本回到“19”