jQuery:单击按钮不会触发事件

时间:2019-01-29 17:20:38

标签: javascript jquery html node.js ejs

我正在尝试根据单击的按钮更改表的行。单击“第一次”时该行发生更改,但是此后该行的值保持不变。另外,更改按钮后,事件列表器也会被删除。

Link

HTML:

<% if(post.status === 1){ %>
  <input type="button" class="btn btn-danger" value="Disapprove"    id="disapproveBtn-<%= i %>">
  <input type="button" class="btn btn-primary" value="Send to Moderation" id="moderateBtn-<%= i %>">
<% } %>

jQuery:

$("[id|='disapproveBtn']").click(function (e) {
  console.log("CLICKED");
  var trIndex = $(this).closest('tr').index();
  var tr = $(this).closest('tr');
  var postId = $(this).closest('tr').find("#postId").text().trim();
  $.post('/admin/disapprove/' + postId, (data) => {
    console.log(tr);


    console.log(data);
    tr.html(`
      <td>
        ${data.post.firstName}
      </td>

      <td>
        ${data.post.lastName}
      </td>

      <td>
        ${data.post.userId}
      </td>

      <td>
        <div id="postId">
          ${data.post.id}
        </div>
      </td>
      <td>
        <a href="/profile/post/${data.post.id}">Here</a>
      </td>

      <td>
        ${data.post.status}
      </td>

      <td>
        <input type="button" class="btn btn-success" value="Approve" id="approveBtn-${trIndex}">
        <input type="button" value="Send to Moderation" class="btn btn-primary" id="moderateBtn-${trIndex}">
      </td>
    `)
  });
});

2 个答案:

答案 0 :(得分:0)

由于声誉,我无法对此发表评论,好像您有一个动态ID

disapproveBtn-<%= i %>

您的事件监听器正在查看不赞成的人,而不是每个人

<% if(post.status === 1){ %>
<input type="button" class="btn btn-danger disapproveButton" value="Disapprove"    id="disapproveBtn-<%= i %>">
<input type="button" class="btn btn-primary" value="Send to Moderation" id="moderateBtn-<%= i %>">

,然后将事件监听器更改为 $(“。disapproveButton”)。click(function(e){

答案 1 :(得分:0)

我想清楚您的期望:

  1. 用户单击表行内的disapprove按钮
  2. 该行发生更改,现在应包含一个approve按钮
  3. 用户单击approve按钮,就会发生某些事情

单击approve按钮时没有任何反应的原因是,首次加载页面时会创建所有事件监听器approve按钮是在页面加载后 创建的,因此它没有事件监听器。

我建议您在页面加载时始终在每行中都有一个“批准”按钮,但只需使用CSS(display:none)将其隐藏,直到单击了disapprove按钮即可。

否则,您需要在每个approve按钮创建时设置一个事件侦听器。