JQuery:取消绑定点击事件不按预期工作

时间:2015-02-20 14:38:35

标签: javascript jquery ajax

我遇到了来自jquery的unbind事件的问题。 我点击一个按钮后加载一个模态,在这个模态中我有两种可能性,继续或取消。如果我继续有一些验证,如果出现问题,应该出现警报,或者如果我点击取消我关闭模态。但是,如果我取消模态,然后单击按钮,在单击“继续”时再次使用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');
    });
});

3 个答案:

答案 0 :(得分:0)

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

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

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

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

HTH

答案 1 :(得分:0)

只有当DOM准备就绪时,您的解除绑定$("#btnAceptarValidacionGeneral").unbind("click");才会执行一次,我认为您必须将其移至功能ValidacionGeneral()

答案 2 :(得分:0)

在搜索之后我发现解除与.live()附加的事件的正确方法是使用.die()

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

它解决了我的问题。