2014-12-03 121 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