【问题标题】:OnClick not firing when using both OnClick and OnClientClick使用 OnClick 和 OnClientClick 时 OnClick 未触发
【发布时间】:2013-08-08 07:58:15
【问题描述】:

我继承了一个系统,我现在正试图通过添加验证来改变它。

我尝试将验证方法放在客户端点击上,根据是否失败,将视图状态更改为下一页。

但是,当 ClientClick 返回 true 时,不会调用 OnClick 方法。

这里是aspx按钮;

<asp:Button ID="btnSaveMile"  UseSubmitBehavior="false" OnClick="btnSaveMile_OnClick" OnClientClick="return milestoneDateValidation()" Width="149" CssClass="button"
                             runat="server" Text="Save For Later" />

它是如何被 Chrome 渲染的;

<input type="button" name="btnSaveMile" value="Save Edit" onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','')" id="btnSaveMile" class="button ui-button ui-widget ui-state-default ui-corner-all" style="width:149px;" role="button" aria-disabled="false">

用于检查日期的验证(简化)按时间顺序排列;

function milestoneDateValidation() {
var dateFields = new Array();
var flag = true;
var date1;
var date2;

dateFields = $("#completedDateStage1,  #completedDateStage2,  #completedDateStage3, #completedDateStage4, #completedDateStage5").filter(function() {
    return this.value.length !== 0;
})

var length = dateFields.length;
if (length > 1) {
    for (var i = 1; i < length; i++) {
        date1 = Date.parse(dateFields[i].value.replace(new RegExp("-", "gm"), " "));
        date2 = Date.parse(dateFields[i - 1].value.replace(new RegExp("-", "gm"), " "));

        if (date1 < date2) {
            flag = false;
            break;
        }
    }
}
return flag;
}

Button点击方法;

        public void btnSaveMile_OnClick(object sender, EventArgs e)
    {
        SaveMileStones(false);
        Response.Redirect("Default.aspx?ID=" + strCID);
    }

我对 Web 应用程序还很陌生,但我无法发现任何明显的错误,除了在回发时未调用 btnSaveMile_OnClick。

查看其他帖子,我注意到按钮 OnClick 呈现为;

onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','OnClick')"

但是我的被渲染为;

onclick="return milestoneDateValidation();__doPostBack('btnSaveMile','')"

这是微不足道的,还是这就是问题所在?如果是这样,为什么它是空白的,或者我应该如何更正它?

我在这里阅读了很多关于 SO 的文章,并尝试了很多解决方案,但是没有一个能够解决这个问题,所以我准备开始拔头发了。有人有什么想法吗?

【问题讨论】:

  • 如果客户端验证返回false,你还想回发吗?也就是要不要在服务端使用结果真/假?
  • 不,如果验证失败,返回false,我不希望它回发

标签: html asp.net onclick postback onclientclick


【解决方案1】:

如您所见,当您的函数返回 true 或 false 时,它​​不会回发。修改 OnClientClick 逻辑如下:

OnClientClick="if (!milestoneDateValidation()) {return false;}"

因此,只有在验证结果为 false 时才返回 false。否则,它只会回发。

【讨论】:

  • 它仍然没有调用 btnSaveMile_OnClick。它正在返回正确的布尔值,但它不会进入下一步并调用它的 onclick 方法返回 true。
猜你喜欢
  • 2016-09-14
  • 2013-03-21
  • 1970-01-01
  • 2013-10-09
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多