如何删除$(document).on点击事件?

时间:2014-03-14 09:28:58

标签: javascript jquery

以下是添加活动的代码

   $(document).on({
      click: function() {
        $(this).hide();
        $('#form_name').removeClass('hide');
        $('#form_template_name')
          .attr('placeholder', $(this).text())
          .focus();
      }         
    }, '.form-template-name');

对于某些情况,我不希望触发此事件。所以我试过的是

$('.form-template-name').off();
$('.form-template-name').unbind();

但似乎没有任何效果。我错过了什么吗?

7 个答案:

答案 0 :(得分:12)

你需要将事件传递给解除绑定到.off(),还要看到使用namepsaced事件名称

$(document).on({
    'click.myevent': function () {
        $(this).hide();
        $('#form_name').removeClass('hide');
        $('#form_template_name')
            .attr('placeholder', $(this).text())
            .focus();
    }
}, '.form-template-name');

$(document).off('click.myevent', '.form-template-name');

演示:Fiddle

答案 1 :(得分:2)

试试这个。

$(document).off('click', '.form-template-name');

答案 2 :(得分:1)

事件处理程序绑定到一个元素。您可以从附加到的元素中取消绑定事件处理程序,但是您不能将它从后代元素中取消绑定,因为它不是它正在侦听的位置。

你可以:

  1. 检查事件对象的the target property(事件处理函数的第一个参数)以查看在执行任何操作之前单击了哪个元素然后return
  2. 将新事件处理程序绑定到要阻止事件触发的元素和prevent the event from continuing up the DOM

答案 3 :(得分:0)

您可以尝试:

var clickEvent = function() {
    $(this).hide();
    $('#form_name').removeClass('hide');
    $('#form_template_name')
      .attr('placeholder', $(this).text())
      .focus();
};

$(document).on({
   click: clickEvent         
}, '.form-template-name');

与之解开:

$(document).unbind('click', clickEvent);

答案 4 :(得分:0)

将您的点击处理程序更改为:

$(document).on({
    'click.myevent': function () {
        $(this).hide();
        $('#form_name').removeClass('hide');
        $('#form_template_name')
            .attr('placeholder', $(this).text())
            .focus();
    }
}, '.form-template-name');

然后您可以使用 .off() ,名称间隔为 event names

$(document).off('click.myevent', '.form-template-name');

答案 5 :(得分:-1)

试试这个:

$('.form-template-name').unbind("click"", event);

并将click事件定义为:

var event = function() {
    $(this).hide();
    $('#form_name').removeClass('hide');
    $('#form_template_name')
      .attr('placeholder', $(this).text())
      .focus();
};

然后像以前一样使用它。

答案 6 :(得分:-1)

您还可以尝试使用 event.preventDefault()功能。这里有更详细的描述:http://api.jquery.com/event.preventdefault/