繁体   English   中英

如何在.click()上解除绑定另一个jQuery函数?

[英]How do I unbind another jQuery function on .click()?

我运行此脚本可以将菜单栏固定在滚动浏览器上。 此处实际上不需要进行任何更改(应正常运行)。 但是,您可能需要它...

var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');
var start = $(div).offset().top;

$(function fixedPackage(){   
    $.event.add(window, "scroll", function() {
        var p = $(window).scrollTop();
        $(div).css('position',((p)>start) ? 'fixed' : 'static');
        $(div).css('top',((p)>start) ? '0px' : '');

        //Adds TOP margin to #main_wrapper (required)
        $(editor).css('position',((p)>start) ? 'relative' : 'static');
        $(editor).css('top',((p)>start) ? '88px' : '');
    }); 
});

现在解决当前的问题。 我有另一个脚本函数,该脚本函数调用模式弹出窗口(再次可以正常工作)。 但是,从模态打开时滚动页面时,从UI角度来看并不是一件难事。 所以我想在调用下面的模式脚本时禁用上面的脚本。 换句话说,当我单击以打开模式弹出窗口时,上面的脚本不起作用。

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).click(function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click',fixedPackage);
});

})

如您在上面看到的,我尝试解除绑定滚动功能(第一个代码段),但这是不正确的。

这两个脚本位于两个单独的js库中。

我强烈不同意您应该绑定和取消绑定该事件。 没必要! 滚动事件中的一些逻辑检查模式是否打开应该可以解决此问题:

$(function fixedPackage(){   
    $(window).bind("scroll", function() {

        // if the modal is displayed, do nothing
        if ($('#setupPanel').is(':visible'))
            return;

        // -- existing code here --
    }); 
});

这样,如果模态元素可见,则代码仅在其所在位置停止。 隐藏元素后,代码将继续像以前一样工作,而无需在其他脚本中管理事件的状态……令人困惑!

另外,如其他评论中所述,请勿使用$.event.add ,而应使用公共API方法bind

文档

将jquery对象存储到var中时,可以直接调用函数:

var setUp = $('.setupButton');
var div = $('#wizMenuWrap');
var editor = $('#main_wrapper');

setUp.click(...);
seTup.unbind(...);

editor.css(...);

div.css(...);

尝试

  $(setUp).unbind('click').die('click')

您需要做的就是将脚本更改为:

$(function () {

var setUp = $('.setupButton');

// SHOWS SPECIFIED VIEW

$(setUp).bind('click',function () {        
    $('#setupPanel').modal('show');
    //PREVENTS PACKAGE SELECT FIXED POSITION ON SCROLL
    $(setUp).unbind('click');
});

})

如jQuery Docs中所述, Event handlers attached with .bind() can be removed with .unbind() 有关绑定和取消绑定的更多信息:

.bind()

.unbind()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM