【问题标题】:Why can't I execute my onClick after my OnclientClickEvent?为什么我不能在 OnclientClickEvent 之后执行我的 onClick?
【发布时间】:2015-01-16 08:35:17
【问题描述】:

我在 javascript 中有以下函数,它调用一个执行一些服务器端检查的 WebMethod:

<script type="text/javascript">
function comprobar() 
{
PageMethods.F1
(
 $("input[type=text][id*=txt_nombre_nu]").val(),
 $("input[type=text][id*=txt_numero_empleado]").val(),
 $("input[type=text][id*=combo_empresa_nu]").val(),
 $("input[type=text][id*=txt_ceco]").val(),
 $("input[type=text][id*=combo_gestor_nu]").val(),
 $("input[type=text][id*=combo_crear_datos]").val(),
    function (msg) 
    {
    if (msg == "") 
       {
       alert("Datos correctos");
       return true;
       }
       else 
       {
       alert(msg);
       return false;
       }
    },
    function (msg) 
    {          
    }
 );
 }
 </script>

函数本身似乎可以正常执行,因为如果数据不正确,它会显示带有正确数据的警报

关键是,在这个函数执行之后,我需要执行服务器端代码的事件 OnClick 来执行。我知道可以创建另一个 PageMethod 来执行代码,问题是需要调用的代码不是静态的,所以我不能把它放在 WebMethod 上。

反正我做了以下检查:

这是我定义事件的按钮:

<obout:OboutButton runat="server" ID="btn_mdu_confirmar" Text="Confirmar" CausesValidation="true"
       OnClientClick="comprobar();return false;" OnClick="btn_mdu_confirmar_Click"/>

我已经检查过,如果 return false 则 btn_mdu_confirmar_Click 不会执行,但如果我将其更改为 return true;它总是在 OnClientClickEvent 之后执行。那么,为什么不像 OnClientClick="return comprobar();"甚至 OnClientClick="comprobar();"不起作用,看起来它总是返回一个 false 一个 true 值,即使 msg 与“”不同?

值得注意的是,我无法调试 javascript 代码,但如果它正确显示警报,我看不出简单的 return 语句会失败的真正原因。

希望您能帮我解决这个问题,感谢您的宝贵时间。

【问题讨论】:

  • JavaScript 函数对象默认总是返回void。你需要在你的函数comprobar()中设置return true

标签: javascript asp.net


【解决方案1】:

这是与您的 JS 代码相关的更新代码:

function comprobar() 
{
 PageMethods.F1
  (
    $("input[type=text][id*=txt_nombre_nu]").val(),
    $("input[type=text][id*=txt_numero_empleado]").val(),
    $("input[type=text][id*=combo_empresa_nu]").val(),
    $("input[type=text][id*=txt_ceco]").val(),
    $("input[type=text][id*=combo_gestor_nu]").val(),
    $("input[type=text][id*=combo_crear_datos]").val(),
    function (msg) 
    {
       if (msg == "") 
       {
       alert("Datos correctos");
       return true;
       }
       else 
       {
       alert(msg);
       return false;
       }
   },
   function (msg) 
   {          
   }
);

return true; //now comprobar() always returns true;
}

那么你的 HTML 中的这个更新应该可以做到:

<obout:OboutButton runat="server" ID="btn_mdu_confirmar" Text="Confirmar" CausesValidation="true"
   OnClientClick="return comprobar();" OnClick="btn_mdu_confirmar_Click"/>

您可以检查方法PageMethods.F1 的结果并检查这是对还是错,并在comprobar() 的末尾返回结果。我不能用这个更新我的代码,因为我不知道PageMethods.F1 是如何工作的。 (它不在您的帖子中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2011-03-23
    • 2013-04-17
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多