jquery - jQuery 开始/停止序列只工作一次
问题描述
我已经为.ajaxStart
和编写了一个 jQuery 序列.ajaxStop
。它也完全按照我想要的方式工作(经过多次试验和错误),但现在它只能工作一次,并且在不重新加载页面的情况下将无法再次工作。
我认为这是一个非常简单直接的序列,但我错了吗?我什至不知道此时该尝试什么我已经在努力理解问题所在。
我尝试过使用和不使用队列,文本而不是 html,将回调添加到 slideUp 而不是队列,id 而不是类。尝试不清空帖子消息。仍然..每次都一样,如果我两次提交相同的东西,它就行不通了。我必须刷新页面才能让它再次工作。
它需要以非常特定的顺序触发,因为我只希望一次显示一个“事物”,即表单、加载程序或消息。
我真的希望有人能找到我做错了什么,或者能指出我正确的方向。将不胜感激!
jQuery/AJAX
$(document).ajaxStart(function(){
$(".post-form").slideUp(250, function(){
$(".post-loader").fadeIn(250);
});
});
$(document).ajaxStop(function(){
$(".post-loader").finish().fadeOut(250, function(){
$(".post-message").slideDown(250).delay(5000).slideUp(250).queue(function(){
$(this).empty();
$(".post-form").slideDown(250);
});
});
});
$("#add_newblog").click(function(){
$.post("users/add_blog.php",
{
blogtitle: $("#add_blogtitle").val(),
blogdate: $("#add_blogdate").val(),
blogcontent: $("#add_blogcontent").val()
},
function(data){
$(".post-message").text(data);
});
});
HTML
<div class="modal fade" id="user-blog-add">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">New Post</h4>
<button class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<!-- SERVER LOADING -->
<div class="alert alert-primary mt-2 post-loader" style="display:none;">
<div class="d-flex justify-content-center">
<div class="spinner-grow" role="status">
<span class="sr-only">Loading...</span>
</div>
</div>
</div>
<div class="alert alert-primary mt-2 text-center post-message" style="display:none;">
<!-- SERVER RESPONSE -->
</div>
<!-- SERVER AJAX FORM -->
<div class="post-form" role="form">
<div class="form-group">
<label for="add_blogtitle">Post Title</label>
<input type="text" class="form-control" id="add_blogtitle" name="add_blogtitle" maxlength="255" placeholder="My blog title...">
<small class="form-text text-muted">Must be less than 255 characters, and contain only letters and/or numbers.</small>
</div>
<div class="form-group">
<label for="add_blogdate">Post Date</label>
<input type="text" class="form-control" id="add_blogdate" name="add_blogdate" placeholder="YYYY-MM-DD">
<small class="form-text text-muted">Select a date, or insert your own date in a YYYY-MM-DD format.</small>
</div>
<div class="form-group">
<label for="add_blogcontent">Post Content</label>
<textarea class="form-control" id="add_blogcontent" name="add_blogcontent" rows="4" placeholder="My new blog post..."></textarea>
<small class="form-text text-muted">Basic HTML entities are aloud with no attributes, up to and including: Paragraphs, Lists, Italics, and Bold.</small>
</div>
<button class="btn btn-secondary btn-block w-50 mx-auto" id="add_newblog">Submit</button>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-dismiss="modal" type="button">Close</button>
</div>
</div>
</div>
</div>
.ajaxStop
在我看来,动画在第二次提交时中途停止。后加载器淡出,但随后消息不会出现并且表单不会滑出。
我的 PHP 没有抛出任何错误,在第二次提交时仍然可以正常工作,只是 jQuery 序列第二次失败。
解决方案
问题是由queue
调用引起的。可以通过将回调移动到slideUp
方法来修复它:
$(document).ajaxStart(function () {
$(".post-loader").fadeIn(250);
$(".post-form").slideUp(250);
});
$(document).ajaxStop(function () {
$(".post-loader").finish().delay(2000).fadeOut(250, function () {
$(".post-message").slideDown(250).slideUp(250, function () {
$(this).empty();
$(".post-form").slideDown(250);
});
});
});
$("#add_newblog").click(function () {
$.post("test",
{
blogtitle: $("#add_blogtitle").val(),
blogdate: $("#add_blogdate").val(),
blogcontent: $("#add_blogcontent").val()
},
function (data) {
$(".post-message").text(data);
});
});
更改部分:
老的:
$(".post-message").slideDown(250).delay(5000).slideUp(250).queue(function(){
$(this).empty();
$(".post-form").slideDown(250);
});
新的:
$(".post-message").slideDown(250).delay(5000).slideUp(250, function(){
$(this).empty();
$(".post-form").slideDown(250);
});
推荐阅读
- c# - 我运行网站时没有显示我的流派
- math - 缩小一个圆圈以匹配另一个圆圈所需的比例值?
- c++ - “Empleado”类中的错误“字符串”没有类型
- r - 根据 R 中的值传播记录
- permissions - 如何删除向android用户询问的所有位置权限
- authentication - 路由“/authentication/login”如何连接到“_LoginPartial.cshtml”?
- java - 从 Linux 命令行启动 Spring Boot Web 应用程序
- mysql - 通过node.js将汉字插入MySQL
- buffer - Informatica 中的缓冲区长度与列精度与 DTM 缓冲区大小
- ruby-on-rails - Rails:对教程如何在方法中调用行项目对象感到困惑