关于 jquery:防止 __doPostBack 触发

Prevent __doPostBack from firing off

我有一个网格控件,允许用户将值添加到网格中。

它会生成以下链接以插入一个全新的项目。

1
Insert

我有一些自定义 jQuery 代码在提交之前验证文本框。我试图阻止链接提交 __doPostBack,但我的代码不起作用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    // if need be, move this to its own .js file
    String.prototype.trim = function() { return this.replace(/^\\s+|\\s+$/, ''); };

    // Document loaded, let's register some validation
    $(function() {

        $('#holidayValidationDisplay').hide();

        $('a#radGridHolidays_ctl00_ctl02_ctl02_PerformInsertButton').click(function(e) {

            e.stopImmediatePropagation();
            e.preventDefault();
            var hasErrors = false;

            // alert('You clicked me!');
            var holidayName = $('#radGridHolidays_ctl00_ctl02_ctl02_validatorHolidayName').val().trim();
            var holidayDate = $('#radGridHolidays_ctl00_ctl02_ctl02_RDIPHolidayDate_dateInput_text').val().trim();

            if (holidayName.length == 0) {
                hasErrors = true;
                $('#holidayList').append('
<li>
You must provide a holiday name
</li>
');
            }

            if (holidayDate.length == 0) {
                hasErrors = true;
                $('#holidayList').append('
<li>
You must provide a holiday date
</li>
');
            }

            if (hasErrors) {
                $('#holidayValidationDisplay').show();
                return false;
            }
        });
    });

但是当我不希望出现错误时发生回发时,链接仍然会触发。我看到了一些关于阻止它在 UpdatePanel 中工作的内容,但我不确定那里的解决方案是否适用于我的场景。

如果有人有任何想法,我都是"耳朵"。


不是直接回答您的问题,但您可以创建一个"虚拟"按钮来进行验证,如果成功,单击 .NET 按钮。

伪代码:

1
2
Submit
real submit button</asp:LinkButton>


我相信您遇到的问题是按钮不知道表单是否有效。这就是我所做的:

编写一个根据其他值返回真或假的自定义函数:

1
2
3
4
function isTermsChecked(oSrc, args)
{
    args.IsValid = $("#chkTerms").is(':checked');
}

所以在这个例子中,如果我的条款复选框被选中,那么 args.IsValid 为真。只需转到链接属性,应该有一个名为 OnClientClick 的属性。你会放 isTermsChecked.

在您的特定情况下,您可能希望使用变量。如果 jQuery 无效,将该变量设置为 false,自定义验证函数将引用该变量。本质上,如果它是真的,按钮会继续,假的,它不会。

编辑:如果您对每一行进行验证,我看到的问题是如果一行验证失败,那么我上面的解决方案将禁用所有链接按钮,直到网格上的所有验证都通过。您可能想忘记自定义函数并执行以下操作:

如果 jQuery 验证失败,则在该行中找到链接按钮并添加值为 return falseOnClick 属性,如果验证通过,则删除该属性。