JQuery:取消绑定单击事件未按预期工作

JQuery: Unbind click event not working as expected

本文关键字:工作 事件 取消 绑定 单击 JQuery      更新时间:2024-02-06

我在从jquery中取消绑定事件时遇到问题。我在点击按钮后加载一个模态,在这个模态中我有两种可能性,继续或取消。如果我继续,会有一些验证,如果出现问题,应该会出现警报,或者如果我单击"取消",我会关闭模态。但是,如果我取消了模态,然后在单击continue时再次单击用ajax调用加载模态的按钮,则警报会出现2次,而它应该只出现一次。我已经尝试过使用代码中的unbind事件,但它似乎不起作用,有什么想法吗?

ajax调用由以下代码完成:

function ValidacionGeneral() {
        var frmObs = $("#frmCreate");
        $.ajax({
            url: '@Url.Action("ValidacionGeneral", "Viajes")',
            type: 'POST',
            dataType: "text",
            data: frmObs.serialize(),
            success: function (data) {
                if (data == "OK") {
                    $('#frmCreate').submit();
                }
                else {
                    $.unblockUI();
                    $.modal(data);
                }
            }
        });
    }

模态的脚本是:

<script type="text/javascript">
$(document).ready(function () {
    $("#btnAceptarValidacionGeneral").unbind("click");
    $("#btnAceptarValidacionGeneral").live("click", function (e) {
        e.preventDefault();
        var error1 = false;
        var error2 = false;
        var error3 = false;
        var error4 = false;
        if ($('#ddlMotivosDistancia').length) {
            error1 = $("#ddlMotivosDistancia").val() == '00000000-0000-0000-0000-000000000000';
        }
        if ($('#ddlMotivosRendimiento').length) {
            error2 = $("#ddlMotivosRendimiento").val() == '00000000-0000-0000-0000-000000000000';
        }
        if ($('#ddlMotivosCarga').length) {
            error3 = $("#ddlMotivosCarga").val() == '00000000-0000-0000-0000-000000000000';
        }
        if ($('#ddlMotivosDuracion').length) {
            error4 = $("#ddlMotivosDuracion").val() == '00000000-0000-0000-0000-000000000000';
        }
        if (error1 || error2 || error3 || error4) {
            alert('Debe seleccionar los motivos de tolerancia correspondientes para las alertas');
        } else {
        var form = $('#frmCreate');
        if (form.html() == null) {
            form = $('#frmEdit');
        }
        form.submit();
        }
    });
    $("#btnCancelarValidacionGenral").live("click", function () {
        $("#IdMotivoToleranciaDistancia").val('00000000-0000-0000-0000-000000000000');
        $("#IdMotivoToleranciaRendimiento").val('00000000-0000-0000-0000-000000000000');
        $("#IdMotivoToleranciaCarga").val('00000000-0000-0000-0000-000000000000');
        $("#IdMotivoToleranciaDuracion").val('00000000-0000-0000-0000-000000000000');
    });
});

使用off("click")取消绑定所有点击事件:

$("#frmCreate").off("click")

此外,如果它是一次性的,请首先使用$.one将其绑定:

$("#frmCreate").one("click", function(){/*do this once and once only */});

HTH

只有当DOM准备好时,才会执行一次解除绑定$("#btnAceptarValidacionGeneral").unbind("click");,我认为您必须将其移动到函数ValidacionGeneral()

搜索后,我发现要解除与.live()关联的事件的绑定,正确的方法是使用.die()

以下是文档:http://api.jquery.com/die/

它解决了我的问题。