为什么我不能在OnclientClickEvent之后执行onClick?

时间:2015-01-16 08:35:17

标签: javascript asp.net

我在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"/>

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

需要注意的是我无法调试javascript代码,但如果它正确显示警报,我认为没有一个简单的return语句失败的真正原因。

希望你能帮助我,谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

这是与您的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是如何工作的,因此我无法使用此更新代码。 (它不在你的帖子中)。