【问题标题】:Asp.Net button onclientclick problemAsp.Net按钮onclientclick问题
【发布时间】:2010-08-31 07:35:02
【问题描述】:

我似乎有一个奇怪的问题,我不知道如何解决。 我有一个这样的按钮:

<asp:Button ID="btnSave" runat="server" ClientIDMode="Static" Text="Save" OnClientClick="return ConfirmSave();" OnClick="btnSave_Click" />

如果我像下面这样编写我的客户端函数,它会按预期工作:

function ConfirmSave()
{
  return confirm('Confirm?');
}

但我应该在函数内部检查确认结果,如下所示:

    function ConfirmSave() 
    {
      if (Page_ClientValidate('validationGroup'))
      {
        var conf = confirm("Confirm?");

        if (conf)
        {
             $('#btnSave').attr('disabled', 'disabled');
        }

        return conf;
      }
      else
        return false;
   }

这样做,页面回发但服务器点击事件不会触发。

有人可以帮忙吗?谢谢

【问题讨论】:

  • ^^ 在 if 条件下,请将“--do something”替换为实际正在做的事情。
  • 在clientclick上使用此代码可能会有所帮助:

标签: javascript asp.net onclientclick


【解决方案1】:

在代码完成并提交后立即使用超时禁用按钮。

if (conf) 
{ 
     setTimeout( function() { $('#btnSave').attr('disabled', 'disabled') }, 0 );
} 

【讨论】:

  • +1 这是唯一对我有用的东西,如果我的脚本将按钮设置为禁用,显然 webforms 回发 javascript 决定不处理该按钮。
【解决方案2】:

是的,它会触发,因为 Button 是使用提交类型输入的。

您可能还有其他错误,可能是页面中的按钮 ID 重复(因为您已将其设置为静态模式)。

检查您是否在其他地方再次提供了 btnSave,或者检查您是否有任何 JavaScript 错误。

(页面渲染后,在浏览器上查看页面的源代码,如果存在多次,则搜索 btnSave id)

【讨论】:

  • 如果我有一个重复的按钮 ID,我输入的第一个函数应该不起作用,而是按预期工作。似乎第一种方法正确返回 True/False,第二种方法也没有。似乎没有javascript错误,但我不太确定,因为页面回发(没有触发服务器点击)。
  • Aristos 是正确的,一定有其他原因导致了这种行为。它看起来与 if 条件块没有直接关系。
  • 所以第一个方法不应该工作,而是按预期工作。所以似乎唯一不同的是客户端函数的编写方式。
  • @opaera 从您看到从该输入返回的帖子的那一刻起,btnSave_Click 就会被调用,除非您更改了脚本上的某些内容(也许您制作了自定义回帖?更改提交 id 。 ..我不确定)
  • 似乎没有什么可以解决这个问题。如果我做一个 [return confirm()] 它可以工作,在调试模式下我会拦截 onclick 服务器事件。如果我输入类似 [var conf = coonfirm(); if(conf) { 返回真; }] 页面回发,但点击事件未触发。
【解决方案3】:

如果您在后面的代码中有一个名为 btnSave_Click() 的方法,那么当您回发时,它将首先落入您的 Page_load 方法,然后再落入该方法。如果您使用的是 VB,那么您将需要一个带有 Handles btnSave_Click() 的方法。

【讨论】:

  • 后面的代码没问题,我知道asp.net是如何工作的,似乎是一些奇怪的javascript问题。
猜你喜欢
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多