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

时间:2012-05-20 21:21:14

标签: 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;");
                  }
              }
        });
    }

此功能正常。 <a>元素的属性正在正确更改。但是,新事件(函数bookmark_remove没有被触发。所以我认为我的方法因为一些基本的误解而无法正常工作?

有人能告诉我这个假设是正确的并给出任何提示吗?

3 个答案:

答案 0 :(得分:5)

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

$('.a_bookmark').click(function() {
    bookmark_remove(bookmark_id);
    return false;
});

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

$('.a_bookmark').attr("onclick", "");

所以把它放在一起:

$('.a_bookmark').attr("onclick", "").click(function() {
    bookmark_remove(bookmark_id);
    return false;
});

显然人们不明白我在做什么,所以这是你的完整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;
              });
          }
    });

答案 1 :(得分:2)

"bookmark_remove("+bookmark_id+"), return false;"

逗号错了。它应该是一个分号。

答案 2 :(得分:1)

由于您使用的是jQuery,而不是:

$('.a_bookmark').attr("onClick","bookmark_remove("+bookmark_id+"), return false;");

我建议你使用这个表格:

$('.a_bookmark').click(function(){
    bookmark_remove(bookmark_id);
    return false;
})
使用较少的引号令牌更具可读性,对吧?