不正确的阵列推送和拼接?

时间:2017-10-27 22:40:39

标签: javascript

我正在制作邀请系统。我正在使用ajax加载搜索结果列表。当点击li时,我将用户的id推入一个数组,并在li上添加一个复选标记,让他们知道它们已被添加到列表中。

  1. 推动工作但拼接不是。此外,当列表为空时,提交按钮不会返回其禁用状态和原始样式。
  2. 最后,当我再次搜索(重新调用ajax)时,它会删除附加的复选标记。有没有办法使用javascript来存储哪个用户点击并在搜索其他名称时保留附加的复选标记?

    (^当我用ajax加载结果时我检查一个人是否被邀请在我的数据库中我可以这样做,所以如果他们已被邀请点击将从表中删除..如果没有点击我插入与ajax和setTimeout成功..你觉得这样做会不好吗?)

    以下是我的html&&脚本

    HTML
    <li class='inviteUser'>
        <img src='$usersProfilePhoto' alt=''>
        <h2>$usersname</h2>
        <input type='hidden' value='$otherUserID'>
        <span></span>
    </li>
    
    
    $(function(){
    
        var inviteList = new Array();
    
          $(document).on('click', '.inviteUser', function(){
    
              var inviteUserID = $(this).children('input').val();
    
              inviteList.push(inviteUserID)
    
              $(this).children('span').append("<p class='remove'>&#x2713;</p>");
    
              if(inviteList.length > 0) {
    
                  document.getElementById('imcSubmitButton').disabled = false;
                  $('#imcSubmitButton').css({'opacity':'1'});
    
              } else {
    
                  document.getElementById('imcSubmitButton').disabled = true;
                  $('#imcSubmitButton').css({'opacity':'0.25'});
              }
    
          });
    
          $(document).on('click', '.remove', function() {
    
              inviteList.splice($(this).index(), 1);
    
              $(this).remove();
    
          });
    
    });
    

1 个答案:

答案 0 :(得分:1)

问题是inviteList中的索引与HTML中的索引不对应。您应该在inviteList中搜索包含此项目的userID的元素,并将其拼接出来。

  $(document).on('click', '.remove', function() {
      var userid = $(this).parent().siblings("input").val();
      var index = inviteList.indexOf(userid);
      if (index != -1) {
        inviteList.splice(index, 1);
      }
      $(this).remove();
  });

要通过记住邀请的用户来解决您的问题,处理AJAX响应的代码可以使用:

if (inviteList.indexOf(userId) != -1) {
    // Add checkmark
}

如果inviteList是一个对象而不是数组,使用userids作为键,事情会更容易。