jQuery.toggle()事件火已关闭

jQuery.toggle()事件火已关闭,jquery,Jquery,上面的代码与我的jwPlayer()实现交互,在前两次单击时工作正常(在开始播放的第一张专辑上单击play,在第二张专辑上单击play,第二张专辑开始播放,但如果在另一张专辑上单击play,该函数将触发暂停切换,而不是触发播放切换)。。。希望这是有道理的 工作代码: $(function() { var jw; jw = Player; return $('.btn-control:not(.add-btn)').toggle(function() { var mnetInf

上面的代码与我的jwPlayer()实现交互,在前两次单击时工作正常(在开始播放的第一张专辑上单击play,在第二张专辑上单击play,第二张专辑开始播放,但如果在另一张专辑上单击play,该函数将触发暂停切换,而不是触发播放切换)。。。希望这是有道理的

工作代码:

$(function() {
  var jw;
  jw = Player;
  return $('.btn-control:not(.add-btn)').toggle(function() {
    var mnetInfo;
    mnetInfo = {
      albumId: $(this).data('album-id'),
      trackId: $(this).data('song-id')
    };
    if (jwplayer() !== void 0 && $(this).hasClass('current')) {
      jw.play();
    } else {
      jw.get(mnetInfo);
      $(document.body).find('a[class*="pause"]').removeClass('pause').addClass('play');
      $(document.body).find('td.bold').removeClass('bold');
      $(document.body).find('.current').removeClass('current');
      if ($(document.body).find($(this)).parentsUntil('table').length > 0) {
        $(document.body).find('tr#' + mnetInfo.trackId + ' td.song_info').addClass('bold');
      }
    }
    $(this).removeClass('play').addClass('pause current');
    console.log("FIRST");
    return false;
  }, function() {
    jw.pause();
    $(this).removeClass('pause').addClass('play');
    console.log("SECOND");
    return false;
  });
});

切换将其状态保持为特定元素。因此,当在连续调用中对同一元素调用时,它将仅在两个回调之间交替。如果无论单击哪个元素,都希望在连续功能之间切换,则必须保持自己的状态,并在同一元素上的暂停/播放或始终调用切换(fn1、fn2)之间切换


您还应该学习如何简化jQuery的使用。例如,此代码:

 $(function() {
  var jw;
  jw = Player;
  $('.play').live("click", function() {
    var mnetInfo;
    mnetInfo = {
      albumId: $(this).data('album-id'),
      trackId: $(this).data('song-id')
    };
    if (jwplayer() !== void 0 && $(this).hasClass('current')) {
      jw.play();
    } else {
      jw.get(mnetInfo);
      $('a[class*="pause"]').removeClass('pause').addClass('play');
      $('td.bold').removeClass('bold');
      $('.current').removeClass('current');
      if ($(this).parentsUntil('table').length > 0) {
        $('tr#' + mnetInfo.trackId + ' td.song_info').addClass('bold');
      }
    }
    $(this).removeClass('play').addClass('pause current');
    return false;
  });
  return $('.pause').live("click", function() {
    jw.pause();
    $(this).removeClass('pause').addClass('play');
    return false;
  });
});
应该是:

  $(document.body).find('a[class*="pause"]').removeClass('pause').addClass('play');
  $(document.body).find('td.bold').removeClass('bold');
  $(document.body).find('.current').removeClass('current');
  if ($(document.body).find($(this)).parentsUntil('table').length > 0) {
    $(document.body).find('tr#' + mnetInfo.trackId + ' td.song_info').addClass('bold');
  }

不是用
$(document.body)启动每个选择器。find()

是的,我已经走了这条路。。。我只是不想把按钮的状态分开。。。我想我可以把它分成一个
$('.play')。单击
和一个
$('.pause')。单击
功能感谢您提供关于简化的提示。。。我从我正在写的一个对象模态中养成了这个习惯,在那里你必须确定内容是在模态中还是在模态后面。谢谢你指出这一点!有时我忘了我在做这件事
  $('a[class*="pause"]').removeClass('pause').addClass('play');
  $('td.bold').removeClass('bold');
  $('.current').removeClass('current');
  if ($(this).parentsUntil('table').length > 0) {
    $('tr#' + mnetInfo.trackId + ' td.song_info').addClass('bold');
  }