Javascript 避免按钮上的多次单击事件

Javascript 避免按钮上的多次单击事件,javascript,jquery,events,javascript-events,Javascript,Jquery,Events,Javascript Events,我的网页上有“下一步”和“上一步”按钮。他们在可用的中间部分获得下一页和上一页。新页面的响应来自服务器 如果用户多次点击按钮,例如5次,则跳过4页,并加载第5页。我想做的是在第一次未完成时禁用所有单击事件 我知道我可以在第一次单击时禁用按钮。但我不喜欢写一个逻辑来启用/禁用按钮。JavaScript中是否提供了更智能的代码语句。我有一个非常喜欢的技巧 我使用这个css: .page-load-mask { position: fixed; z-index: 99999; top: 0

我的网页上有“下一步”和“上一步”按钮。他们在可用的中间部分获得下一页和上一页。新页面的响应来自服务器

如果用户多次点击按钮,例如5次,则跳过4页,并加载第5页。我想做的是在第一次未完成时禁用所有单击事件


我知道我可以在第一次单击时禁用按钮。但我不喜欢写一个逻辑来启用/禁用按钮。JavaScript中是否提供了更智能的代码语句。

我有一个非常喜欢的技巧

我使用这个css:

.page-load-mask {
  position: fixed;
  z-index: 99999;
  top: 0;
  height: 100%;
  width: 100%;
  cursor: progress;
}
在页面上的任意位置使用此标记:

加载任何内容时,显示该div并在加载完成时再次隐藏它


为了进一步解释,所发生的情况是,
.page load mask
在可见时将覆盖整个页面,并将光标悬停在该页面上,使其成为加载样式。因为它覆盖了页面,所以无法单击任何内容。您还可以使用
position:absolute
或其他位置、宽度、高度等来调整此选项,以仅填充页面的一部分。

我有一个我非常喜欢的技巧=D

我使用这个css:

.page-load-mask {
  position: fixed;
  z-index: 99999;
  top: 0;
  height: 100%;
  width: 100%;
  cursor: progress;
}
在页面上的任意位置使用此标记:

加载任何内容时,显示该div并在加载完成时再次隐藏它


为了进一步解释,所发生的情况是,
.page load mask
在可见时将覆盖整个页面,并将光标悬停在该页面上,使其成为加载样式。因为它覆盖了页面,所以无法单击任何内容。您还可以使用
position:absolute
或其他位置、宽度、高度等来调整此选项,以仅填充页面的一部分。

我有一个我非常喜欢的技巧=D

我使用这个css:

.page-load-mask {
  position: fixed;
  z-index: 99999;
  top: 0;
  height: 100%;
  width: 100%;
  cursor: progress;
}
在页面上的任意位置使用此标记:

加载任何内容时,显示该div并在加载完成时再次隐藏它


为了进一步解释,所发生的情况是,
.page load mask
在可见时将覆盖整个页面,并将光标悬停在该页面上,使其成为加载样式。因为它覆盖了页面,所以无法单击任何内容。您还可以使用
position:absolute
或其他位置、宽度、高度等来调整此选项,以仅填充页面的一部分。

我有一个我非常喜欢的技巧=D

我使用这个css:

.page-load-mask {
  position: fixed;
  z-index: 99999;
  top: 0;
  height: 100%;
  width: 100%;
  cursor: progress;
}
在页面上的任意位置使用此标记:

加载任何内容时,显示该div并在加载完成时再次隐藏它


为了进一步解释,所发生的情况是,
.page load mask
在可见时将覆盖整个页面,并将光标悬停在该页面上,使其成为加载样式。因为它覆盖了页面,所以无法单击任何内容。您还可以使用
位置:绝对
或其他位置、宽度、高度等调整此选项,以仅填充页面的一部分。

如果您使用的是更新面板,这是最好的方法。用户将知道这个过程正在进行,甚至他也不能点击按钮。您只需要选择代码下面的处理图像

 <asp:UpdateProgress ID="udpProgress" AssociatedUpdatePanelID="update" runat="server">
    <ProgressTemplate>
        <div style="width: 2000px; height: 1000px; background-color: Gray;position: absolute; opacity:50;filter:Alpha(Opacity=50);z-index:10000"> 

        </div>
         <img style="vertical-align: middle; margin-left: 47%; margin-top: 10%; position: absolute;z-index:10001"
                id="imgProgressImage" alt="Progressing" src="Images/LoadingProgress.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>


<asp:UpdatePanel ID="update" runat="server">
 </ContentTemplate >
 <ContentTemplate >
</asp:UpdatePanel>

如果您使用的是更新面板,这是最好的方法。用户将知道这个过程正在进行,甚至他也不能点击按钮。您只需要选择代码下面的处理图像

 <asp:UpdateProgress ID="udpProgress" AssociatedUpdatePanelID="update" runat="server">
    <ProgressTemplate>
        <div style="width: 2000px; height: 1000px; background-color: Gray;position: absolute; opacity:50;filter:Alpha(Opacity=50);z-index:10000"> 

        </div>
         <img style="vertical-align: middle; margin-left: 47%; margin-top: 10%; position: absolute;z-index:10001"
                id="imgProgressImage" alt="Progressing" src="Images/LoadingProgress.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>


<asp:UpdatePanel ID="update" runat="server">
 </ContentTemplate >
 <ContentTemplate >
</asp:UpdatePanel>

如果您使用的是更新面板,这是最好的方法。用户将知道这个过程正在进行,甚至他也不能点击按钮。您只需要选择代码下面的处理图像

 <asp:UpdateProgress ID="udpProgress" AssociatedUpdatePanelID="update" runat="server">
    <ProgressTemplate>
        <div style="width: 2000px; height: 1000px; background-color: Gray;position: absolute; opacity:50;filter:Alpha(Opacity=50);z-index:10000"> 

        </div>
         <img style="vertical-align: middle; margin-left: 47%; margin-top: 10%; position: absolute;z-index:10001"
                id="imgProgressImage" alt="Progressing" src="Images/LoadingProgress.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>


<asp:UpdatePanel ID="update" runat="server">
 </ContentTemplate >
 <ContentTemplate >
</asp:UpdatePanel>

如果您使用的是更新面板,这是最好的方法。用户将知道这个过程正在进行,甚至他也不能点击按钮。您只需要选择代码下面的处理图像

 <asp:UpdateProgress ID="udpProgress" AssociatedUpdatePanelID="update" runat="server">
    <ProgressTemplate>
        <div style="width: 2000px; height: 1000px; background-color: Gray;position: absolute; opacity:50;filter:Alpha(Opacity=50);z-index:10000"> 

        </div>
         <img style="vertical-align: middle; margin-left: 47%; margin-top: 10%; position: absolute;z-index:10001"
                id="imgProgressImage" alt="Progressing" src="Images/LoadingProgress.gif" />
    </ProgressTemplate>
</asp:UpdateProgress>


<asp:UpdatePanel ID="update" runat="server">
 </ContentTemplate >
 <ContentTemplate >
</asp:UpdatePanel>

您的评论显示您正在使用JS中的变量存储当前页码,并在单击“下一步”或“上一步”按钮时将其增减1

这意味着这个变量在ajax调用完成之前被更改,这就是问题的原因。即使您采用“在请求完成之前只单击一次”的路线,也会存在另一个潜在的问题:当ajax调用失败时,您的变量也会发生变化——在发出ajax请求时,简单地放置一个透明的加载掩码并不能解决这个问题


解决方案是将更改此变量的逻辑移到ajax回调中,最好是在ajax响应中返回您所在的页码。

您的评论显示您正在使用JS中的变量存储当前页码,并在单击“下一步”或“上一步”按钮时将其增加/减少1

这意味着这个变量在ajax调用完成之前被更改,这就是问题的原因。即使您采用“在请求完成之前只单击一次”的路线,也会存在另一个潜在的问题:当ajax调用失败时,您的变量也会发生变化——在发出ajax请求时,简单地放置一个透明的加载掩码并不能解决这个问题


解决方案是将更改此变量的逻辑移到ajax回调中,最好是在ajax响应中返回您所在的页码。

您的评论显示您正在使用JS中的变量存储当前页码,并在单击“下一步”或“上一步”按钮时将其增加/减少1

这意味着这个变量在ajax调用完成之前被更改,这就是问题的原因。即使您采用“在请求完成之前只单击一次”的路线,也会出现另一个潜在问题:当ajax调用失败时,您的变量也会发生变化——而这个问题不会通过简单地将透明加载