javascript:用ajax更改onClick属性不会触发新事件?

Chr*_*ris 0 javascript ajax jquery javascript-events

刚试过以下方法发现这不起作用?

(使用jQuery):

function bookmark_add() {

        $.ajax({
          type: "POST",
          url: "load.php",
          data: data,
          success: function(msg) {
              var msg_array=msg.split("-");
              var success=msg_array[0];
              var bookmark_id=msg_array[1];

              if(success==1) {
                  $('.btn_bookmark').html('Remove Bookmark');
                   $('.a_bookmark').attr("onClick","bookmark_remove("+bookmark_id+"), return false;");
                  }
              }
        });
    }
Run Code Online (Sandbox Code Playgroud)

这个功能很好.<a>正确更改元素的属性.然而,新事件(该功能bookmark_remove没有被解雇.所以我认为我的方法不起作用,因为一些基本的误解,可能?

谁能告诉我这个假设是正确的,并给出任何暗示为什么?

T.J*_*der 5

我不能立即告诉你为什么它不起作用(可能是几件事;一件事情onClick应该是小写的 - 混合大小写的版本只适用于HTML 标记 [不是XHTML,而是HTML],而不是你的'重新与DOM交互,这是区分大小写的),但没有理由这样做.代替:

$('.a_bookmark').click(function() {
    bookmark_remove(bookmark_id);
    return false;
});
Run Code Online (Sandbox Code Playgroud)

如果锚预先配备了现有的onclick处理程序,您可以像这样清除它:

$('.a_bookmark').attr("onclick", "");
Run Code Online (Sandbox Code Playgroud)

所以把它放在一起:

$('.a_bookmark').attr("onclick", "").click(function() {
    bookmark_remove(bookmark_id);
    return false;
});
Run Code Online (Sandbox Code Playgroud)

显然人们不明白我在做什么,所以这是你的完整ajax电话,上面推荐的改变:

    $.ajax({
      type: "POST",
      url: "load.php",
      data: data,
      success: function(msg) {
          var msg_array=msg.split("-");
          var success=msg_array[0];
          var bookmark_id=msg_array[1];

          if(success==1) {
              $('.btn_bookmark').html('Remove Bookmark');
              $('.a_bookmark').attr("onclick", "").click(function() {
                  bookmark_remove(bookmark_id);
                  return false;
              });
          }
    });
Run Code Online (Sandbox Code Playgroud)

  • @Chris在这个答案中读了我的第一条评论.TJ正在清除`onclick`属性,以防止它与您的新事件监听器一起触发. (3认同)
  • 好的,所以通常的方式仍然是最好的方式..谢谢你的反馈! (2认同)