如何在greasemonkey中取消绑定jquery事件处理程序?

时间:2011-03-25 18:56:17

标签: jquery greasemonkey

$("p").click(function(){alert('clicked')});

$("p").unbind('click');

在greasemonkey中,click事件不会解除绑定。我相信这是因为greasemonkey的安全模型将相关事件对象从XPCNativeWrapper中的第一行包装起来,导致第二行无法“找到”它。但是,我似乎无法找到解决方法。有什么建议吗?

更新:像下面这样的东西在greasemonkey中起作用。所以我仍然认为这是一个XPCNativeWrapper问题,我无法找到解决方法。

$("p").click(function(){alert('clicked'); $(this).unbind('click')});

3 个答案:

答案 0 :(得分:1)

我认为在调用unbind()函数后添加了jQuery单击事件。这就是以下代码的工作原理。

$("p").click(function(){alert('clicked'); $(this).unbind('click')});

在单击“确定”后单击“警告”按钮并且unbind()函数工作之前,函数会有一段时间过去。

这是我测试过的解决方案:

function removeClick() {
    $("p").unbind('click');
}

var initTimeout = setTimeout(function() { removeClick(); }, 1000);

如果您不喜欢在greasemonkey脚本中使用超时或间隔,则可以将鼠标悬停事件添加到p元素中以删除单击。

$("p").mouseover(function(){
    $(this).unbind('click');
});

答案 1 :(得分:0)

你是如何加载JQuery的?可能无法正确加载:http://joanpiedra.com/jquery/greasemonkey/

EDIT 或者按照此处所述编辑JQuery代码:http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

答案 2 :(得分:0)

这样做:

window.addEventListener('load', function ()
{
    jQuery = unsafeWindow['jQuery'];
    jQuery(document).unbind("contextmenu");
    jQuery(document).unbind("keypress");
    jQuery(document).unbind("selectstart");
    jQuery(document).unbind("mousedown");
});