【发布时间】:2018-04-28 16:20:13
【问题描述】:
这是一个关于 ASP.NET WebForms asp:RegularExpressionValidator 的客户端 (javascript) 验证如何工作的非常具体的问题。 注意:这与实际的正则表达式无关!
我的目标是在客户端注册一个在正则表达式验证之前得到处理的事件。
考虑以下代码(简化,来自 .aspx 页面)
<asp:TextBox ID="TextBoxMultiId" runat="server" />
<asp:RegularExpressionValidator
ID="RegularExpressionValidatorMultiId" runat="server" Display="Dynamic"
ControlToValidate="TextBoxMultiId" ErrorMessage="Oops!"
SetFocusOnError="True" ValidationExpression="assigned_in_code">
</asp:RegularExpressionValidator>
然后,我还加载了这个 jQuery sn-p(在 addons.js 中):
$(document).ready(function () {
$("form input[type='text'], form textarea").on("change", function () {
$(this).val(function (i, value) {
alert('trim addon this:=' + this.id + ' trimmed:=' + value.trim());
return value.trim();
});
});
});
我希望,在文本输入值发生任何变化时,onchange 事件将触发,导致处理程序发出警报并调整输入值。然后验证器应该只验证修剪后的输入。
然而,这就是实际发生的情况:
- 我对输入进行了更改(通过使用键盘粘贴文本并导航离开)
- 如预期的那样,我会立即收到警报
- 我按 OK 关闭警报
- 输入的值被修剪并显示为这样
- 正则表达式通过显示红色文本“糟糕!”来抱怨不匹配。
但是,在我关闭该框后,输入的值应该被修剪,导致验证器验证修剪后的文本,这满足正则表达式。
验证器似乎验证了粘贴的文本,而不是修剪的文本。为什么?如何修剪,以使修剪后的变体得到验证?
注意:我知道https://forums.asp.net/t/1749522.aspx?Capturing+RegularExpressionValidator+event+client+side,但我不想更改现有代码,另外,这实际上应该适用于我代码中的所有验证器,而不仅仅是以后的正则表达式。
【问题讨论】:
标签: javascript jquery asp.net validation webforms