首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止__doPostBack触发

阻止__doPostBack触发
EN

Stack Overflow用户
提问于 2011-05-13 03:20:27
回答 2查看 968关注 0票数 0

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

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

代码语言:javascript
复制
<a onclick="if(!$find('radGridHolidays_ctl00').insertItem()) return false;" id="radGridHolidays_ctl00_ctl02_ctl02_PerformInsertButton" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("radGridHolidays$ctl00$ctl02$ctl02$PerformInsertButton", "", true, "", "", false, true))'>Insert</a>

我有一些自定义的jQuery代码,可以在提交前验证文本框。我正在尝试阻止该链接提交__doPostBack,但我的代码无法工作。

代码语言:javascript
复制
    // 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中阻止它工作的东西,但我不确定那里的解决方案是否适用于我的场景。

如果有人有什么想法,我会洗耳恭听。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-13 03:32:06

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

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

代码语言:javascript
复制
function isTermsChecked(oSrc, args)
{
    args.IsValid = $("#chkTerms").is(':checked');
}

因此,在本例中,如果选中了my terms复选框,则args.IsValid为true。只需转到链接属性,就会有一个名为OnClientClick的属性。你会让isTermsChecked

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2011-05-13 03:38:07

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

伪代码:

代码语言:javascript
复制
<a onclick="if(validate()) $('#dotnetbutton').trigger('click')">Submit</a>
<asp:Linkbutton id="dotnetbutton" style="position:absolute;left:-99999px">real submit button</asp:LinkButton>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5983292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档