Javascript 避免按钮上的多次单击事件
我的网页上有“下一步”和“上一步”按钮。他们在可用的中间部分获得下一页和上一页。新页面的响应来自服务器 如果用户多次点击按钮,例如5次,则跳过4页,并加载第5页。我想做的是在第一次未完成时禁用所有单击事件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
我知道我可以在第一次单击时禁用按钮。但我不喜欢写一个逻辑来启用/禁用按钮。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调用失败时,您的变量也会发生变化——而这个问题不会通过简单地将透明加载