2014-12-03 78 views
1

我有这个简单的功能,需要使用当前的textarea进行更新。jquery禁用文档功能

$(document).on("keydown", updated_textarea_var, function (e) { 
    // do stuff 
    }); 

所以要做到这一点,我禁用了前面的函数,并用更新后的变量运行一个新函数。问题是以前的功能没有禁用。

$(selector).off(); 

我的变量是正确的。 .off()可以用于文档功能吗?或者我使用不当? 或者有更好的方法来做到这一点?

+1

什么是'selector'? – Ryan 2014-12-03 20:07:17

+0

@minitech选择器是之前updated_textarea_var。 – Mathew 2014-12-03 21:30:15

+0

需要显示您正在使用“禁用”的代码。一些片段不会告诉任何人太多 – charlietfl 2014-12-04 01:53:28

回答

7

.off()必须与使用.on()的选择器和事件一起使用。因此,要解开这个:

$(document).on("keydown", updated_textarea_var, function (e) { 

你这样做:

$(document).off("keydown", updated_textarea_var); 

您必须针对同一对象(一个原始事件被附加到),你必须针对这样的jQuery相应的事件知道要删除哪些事件处理程序。如果您希望更细粒度的匹配来删除内容,您可以选择定位辅助选择器和/或实际的回调函数。


但是,由于您正在使用委托事件处理,因此您可能不必关闭事件处理。如果我们更多地了解您实际想要做的事情,可能会有更清晰的选择。


例如,如果你只是想改变它的textarea是由事件处理程序的目标,那么您可以在事件处理程序使用一个类名(假设有一个名为“目标”一类的名称)是这样的:

$(document).on("keydown", ".target", function (e) { 

而且,然后更改的事件处理程序的操作,这些textarea的,你只是从一个文本区域删除类名称,并将其添加到另一个。这是委派事件处理的一个关键特性。

+0

谢谢,我有一种感觉,它会是这样的。它必须改变的原因是因为目标元素将从“last”改变为“second to last”,反之亦然 – Mathew 2014-12-03 21:28:44

+0

@Mathew - 如果您在目标元素上使用类名称并在此处传递该类名称$(document ).on(“keydown”,“.target”,function(e){',那么所有你需要做的改变目标元素是从一个元素中删除类名并添加到另一个元素中。委托事件处理。 – jfriend00 2014-12-03 21:37:22