事件已绑定多次

时间:2018-11-06 22:50:36

标签: jquery events

单击按钮时,我正在调用这段代码:

       divElement.find('#_bajarFactura').one('click', function (event) {
            event.preventDefault();

            if (tooltipMenu)
                tooltipMenu.hide();

            alert('Se baja el archivo de la factura en lugar de verla en el navegador.');

            divElement.find('#_bajarFactura').off('click', '**');

            return false;
        });

divElement是每次我单击该按钮时都会打开的弹出窗口。

请注意,我正在调用“一个”方法...问题是,即使我正在使用该方法,也要在多次单击按钮后多次调用处理程序。

我试图通过使用“ off”方法调用来强制取消绑定事件,但是没有成功。

有什么帮助吗?

编辑:这是divElement:

<div id="tooltip_content">
    <ul class="list-group">
        <li class="list-group-item">
            <a id="_bajarFactura" href="#" title="Bajar factura"><i class="sl-icon-cloud-download"></i>Bajar factura original</a>
        </li>
        <li class="list-group-item">
            <a id="_verFactura" href="#" title="Ver archivo de la factura"><i class="sl-icon-doc"></i>Ver factura original</a>
        </li>
        <li class="list-group-item">
            <a id="_verDetalle" href="#" title="Ver detalles de la factura"><i class="sl-icon-magnifier-add"></i>Ver Detalle</a>
        </li>
        <li class="list-group-item">
            <a id="_reEnviar" href="#" title="Re-enviar factura a un e-mail"><i class="icon-Mail-Forward"></i>Re-enviar</a>
        </li>
    </ul>
</div>

1 个答案:

答案 0 :(得分:0)

事件处理程序附件one()非常直观。事件处理程序将只运行一次。

如果不是,那是因为您多次设置了事件监听器。

for (var i=0; i<5; i++) {
  $('#_bajarFactura').one('click', function(event) {
    console.log('handler executed');
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="_bajarFactura">Click me!</button>

请注意您如何显示工具提示。

关闭$('#_bajarFactura').off('click');时应致电。

注意:请勿使用('#_bajarFactura').off('click', '**')。正如 @zfrisch 告诉您的那样,它将仅删除委托的事件。来自docs

  

要从元素中删除所有委托事件而不删除未委托事件,请使用特殊值“ **”。