【问题标题】:jQuery addClass/removeClass after ajax successajax成功后的jQuery addClass/removeClass
【发布时间】:2014-09-10 21:35:35
【问题描述】:

我的 ajax 表单提交运行良好,但我想添加一个“成功”类以向用户指示在用户选中或取消选中某个框时请求已完成。到目前为止,我已经尝试了一些事情:

    $(".box").change(function() {
    var id=$(this).val();
    var dataString = "id=" + id + "&crudtype=myapp";
    var clickedObj = $(this).parent().parent();
    $.ajax( {
        type: "POST",
        url: "/myphppage",
        data: dataString,
        cache: false,
        success: function() {
          var oldClass = clickedObj.attr("class");
          clickedObj.fadeIn(1400, function() {
            clickedObj.removeClass(oldClass);
            clickedObj.addClass("updated");  
          });
          clickedObj.fadeOut(1400, function() {
            clickedObj.removeClass("updated");  
            clickedObj.addClass(oldClass);
          });
        } 
    });
});

那个确实应用了“更新”类,但 fadeOut 实际上删除了整行数据(parent().parent() 是我要定位的标签。)

$(".box").change(function() {
  var id=$(this).val();
  var dataString = "id=" + id + "&crudtype=myapp";
  var clickedObj = $(this).parent().parent();
  $.ajax( {
      type: "POST",
      url: "/myphppage",
      data: dataString,
      cache: false,
      success: function() {
        var oldClass = clickedObj.attr("class");
        clickedObj.removeClass(oldClass);
        clickedObj.addClass("updated", 1000);
        clickedObj.removeClass("updated", 1000);
        clickedObj.addClass("updated");
      } 
  });
});

我也试过这个,但发生的只是它(显然)删除了现有的类,添加了新的类,然后立即反向执行相同的操作,因此永远不会看到新的类。尽管我在此站点上运行 jQueryUI,但似乎忽略了 1000 延迟。

感谢任何可以提供帮助的人!

编辑:添加 HTML 代码:

<table id="datatable" class="display dataTable" role="grid">
  <tbody>
    <tr class="odd" role="row">
      <td class="formcell"><input id="actionitem" class="box" type="checkbox" value="1234" name="actionitem[]"></td>
    </tr>
    <tr class="even" role="row">
      <td class="formcell"><input id="actionitem" class="box" type="checkbox" value="5678" name="actionitem[]"></td>
    </tr>
</table>

【问题讨论】:

  • 你也可以发布 HTML 吗?
  • 糟糕,很抱歉——完成了。

标签: jquery ajax jquery-ui


【解决方案1】:

我真的不知道你的淡入淡出效果应该是什么样子。在添加新类并将其淡入之前淡出旧类对我来说确实更有意义。因为当它在开始时淡出时,您看不到包含复选框的&lt;tr&gt;
briansol 的回调是正确的,我在这里使用fadeTo 来防止jQuery 设置display: none

$(".box").on("click", function () {
    clickedObj = $(this).parent().parent();

    clickedObj.fadeTo(1400, 0.01, function(){
        clickedObj.removeClass("oldClass").addClass("updated");
        clickedObj.fadeTo(1400, 1.0, function(){
            clickedObj.removeClass("updated").addClass("oldClass");
        });
    });
});

我也做了个小提琴:http://jsfiddle.net/northkildonan/rmj75wr2/

【讨论】:

  • 谢谢——我在原始帖子中可能不是很清楚。我要做的是让选定的 TR 应用一个包含浅绿色背景的类(不管它是否褪色,我不在乎),让它保持有效几秒钟,然后返回到原来的班级。我尝试了您的代码,它有效地使该行淡出然后又重新出现。
  • 好的,我想通了——我将第一个fadeTo 的延迟更改为1,将不透明度更改为1.0,我正在做生意。谢谢!
【解决方案2】:

您需要使用回调,以便淡入淡出执行其操作,然后触发淡出事件。

改变

      var oldClass = clickedObj.attr("class");
      clickedObj.fadeIn(1400, function() {
        clickedObj.removeClass(oldClass);
        clickedObj.addClass("updated");  
      });
      clickedObj.fadeOut(1400, function() {
        clickedObj.removeClass("updated");  
        clickedObj.addClass(oldClass);
      });

      var oldClass = clickedObj.attr("class");

      clickedObj.removeClass(oldClass).addClass("updated");  

      clickedObj.fadeIn(1400, function() {
        clickedObj.fadeOut(1400, function() {
          clickedObj.removeClass("updated").addClass(oldClass);  //probably unnecessary as its now in a display:none state
      });

【讨论】:

  • 嗯,这似乎与我的第一个示例相同:它设置 display:none 并删除整个 及其所有内容。这就是我想要摆脱的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多