提问者:小点点

jQuery:删除特定的单击处理程序,保留其他处理程序


我有一个包含一些字段的表单,每个字段都绑定了一些click事件(与此功能无关)。

我必须添加另一个到每个字段,以显示一个模态在第一次点击他们中的任何一个,并且只在第一次点击。

我想的是这样的:

    $('.field').on('click',function(){
        $('#modal').modal();
        $('.field').off('click');
    });

其思想是,在第一次单击之后,.off()方法将从所有.field元素中删除“click handlers”。

如果不存在其他引用的“点击处理程序”,那就太好了,因为这样我就把它们全部删除了。

我需要从所有字段中只删除这个特定的“单击处理程序”,保留其他字段,这样,模式窗口应该只在第一次单击任何表单字段时出现,而在单击下一个字段时再也不会出现。

拜托,怎么办?


共1个答案

匿名用户

创建一个函数,该函数在被调用后将自身从处理程序中删除

function showModalOnlyOnce(){
  console.log("Show modal") ;
  $('.field').off('click',showModalOnlyOnce);
}

并使用on分配该值

$('.field').on('click',showModalOnlyOnce);

这不会影响其他click处理程序,如下段所示。总是写入“Ive been clicked”消息,但“show modal”消息只显示一次

null

function showModalOnlyOnce(){
  console.log("Show modal") ;
  $('.field').off('click',showModalOnlyOnce);
}


$('.field').on('click',function(){
    console.log("Ive been clicked");   
});

$('.field').on('click',showModalOnlyOnce);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="field">
<input type="text" class="field">
<input type="text" class="field">
<input type="text" class="field">