首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在onclick之后执行onclick和onclientclick方法

在onclick之后执行onclick和onclientclick方法
EN

Stack Overflow用户
提问于 2015-03-30 05:08:20
回答 1查看 1.4K关注 0票数 1

我试图在使用webmethod (.asmx)时设置一个变量。

该按钮使用onclick调用服务器端方法,使用onclientclick调用javascript,后者调用and方法。

在调用onclick服务器端方法之前,我需要完全执行javascript代码,但是在回发之前,ajax调用似乎还没有完全执行。

警报是在回发之前调用的,但是在回发之后会调用webmethod。在完成回发之前,我需要从webmethod中设置变量。我已经尝试从javascript返回一个false,但是回发根本没有完成。

我正在asp.net中使用Masterpages。另外,在另一个工作良好的项目中,我有一个类似的函数,唯一的区别是在这个项目中,我使用的是MasterPage。

代码语言:javascript
运行
复制
<asp:TemplateField>
<ItemTemplate>
    <asp:Button ID="btnAddRegistration" ClientIDMode="Static" CssClass="btn-sm btn-default" runat="server"
        CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
        onclick="btnAddRegistration_Click"
        OnClientClick='<%# "getSetContactID(\"" + Container.DataItemIndex + "\")" %>'
        Text="Add &#010;Registration" />
 </ItemTemplate>
</asp:TemplateField>

Javascript (调用webmethod)

代码语言:javascript
运行
复制
 function getSetContactID(rowIndex) {

    var CellValue, cell, dataItemIndex;
    var table = document.getElementById('<%=gvContactSearch.ClientID %>');

    $.ajax({
        type: "POST",
        url: "WebService1.asmx/setContactIDgvContact",
        data: '{DataItemIndex: "' + rowIndex + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: alert(rowIndex), <--this gets called before postback
        failure: function (response) {alert(response.d);}

        })
 }

Webservice方法

代码语言:javascript
运行
复制
 [WebMethod]
        public string setContactIDGV1(int DataItemIndex){
           classDetails.gV1DataItemIndex = DataItemIndex; 
           return "";
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 07:18:53

你这里有一个经典的种族条件场景。

默认情况下,AJAX调用是异步的,因此当您触发AJAX调用时,JS代码块逻辑上就会结束,然后触发下一个顺序事件,在本例中是服务器端事件。然后是AJAX代码执行的函数与服务器端onclick事件之间的竞争。在我看来你有几个选择:

  1. 在单击方法的服务器端调用web服务方法。
  2. 防止JS块内的默认元素操作(event.preventDefault),并在完成序列的AJAX success方法中挂起一些东西
  3. 在AJAX调用上设置async: false选项
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29338759

复制
相关文章

相似问题

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