2016-08-05 64 views
3

我對元素有keydown事件。從jquery元素中刪除keydown事件不起作用

$("#element").keydown(function() { 
    // do stuff! 
}); 

現在我想將其刪除。

我試過unbindoff但都沒有工作。

$("#element").unbind("click"); 
$("#element").off("click"); 

我是否需要使用是否或unbindoff.on("click", function...).bind("click", function...),而不是.click。如果是這樣,這不是我的代碼,我不允許修改它,所以我需要一個替代方式。

除了「解除綁定」或「關閉」之外,還有其他方法可以實際使用嗎?

謝謝,非常感謝!

+0

我在一個項目有一個像你這樣的類似的問題而回。我想我在一個函數中添加了點擊處理程序作爲回調。這種方式的點擊功能不能再次工作,除非我通過不同的功能調用它。 – DustinRW

+0

@DustinRW我不明白你的意思? –

+0

我的意思是將你的函數包裝在另一個函數中。例如,您可以將函數_above_封裝在另一個書寫函數中,並創建一組條件。 var outerFunction = function(){if(condition met){$(「#element」)。keydown(function(){ // do stuff! }); };'我只是假設你希望你的函數只能被調用一次,然後停止或只在符合某些條件時運行。希望我的想法更清晰。 – DustinRW

回答

1

.off(events [, selector ] [, handler ]):版本加入:1.7

.unbind(eventType [, handler ]):版本加入:1.0

的。對()方法附加事件處理程序到當前選定集jQuery對象元件。從jQuery 1.7開始,.on()方法提供了附加事件處理程序所需的全部功能。有關從較舊的jQuery事件方法轉換的幫助,請參閱.bind(),.delegate()和.live()。要移除使用.on()綁定的事件,請參閱.off()。要附加只運行一次然後自行刪除的事件,請參閱.one()

因此,我建議注意jQuery版本,因爲bind/unbind不會被使用得太多。

下面的代碼片段可以看到.off()作品罰款:

$(window).load(function() { 
 
    $("#element").keydown(function(e) { 
 
    console.log('keydown event'); 
 
    }); 
 
    $("#elementOff").click(function() { 
 
    // unbind keydown 
 
    $("#element").off('keydown'); 
 
    
 
    // attach click 
 
    $("#element").off('click').click(function(e) { 
 
     console.log('click event'); 
 
    }); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form> 
 
    <input id="element" type="text"> 
 
</form> 
 
<button id="elementOff">Unbind Keydown and attach Click</button>

+0

寫錯了東西,其實我有'keydown'事件,對不起。 –

+0

@DavidCallanan答案和代碼片段已更新。我希望這可以解決你的問題 – gaetanoM

+0

@DavidCallanan你可以嘗試包裝你的代碼在$(窗口).load(function(){function? – gaetanoM

1

由於。點擊()方法只。對(「速記點擊「,處理程序),可以使用分離。 ( 「點擊」):

$("#element").off("click", function(){ 
    $("#element").hide(); //not working 
}); 

$("#element2").on("click", function() { 
    $("#element2").hide(); //working 
}); 

所以,如果你有一個.keydown(處理器),它是在。對( 「的keydown」,處理程序)的快捷方式第一個和第二個變體,以及第三個中的.trigger(「keydown」)。

提供的參數必須與要刪除的事件處理程序匹配。

如果你不想觸摸現有的腳本或者它可能會改變,我建議你只需包含一個外部腳本。具有類似內容

<script src="your_external_script.js"></script> 

:JS腳本的HTML頁面來解開事件

$(document).ready(function(){ 
    $("#element2").unbind("click"); 
}); 
+0

根據http://api.jquery.com/off/,傳遞迴調來移除它並不是必需的。此外,我不記得我在哪裏閱讀它,但它說,你不能傳遞一個匿名函數作爲回調參數。這也是我的朋友的外部代碼,它可能會在將來發生變化(並使用匿名函數),那麼在那種情況下我該如何做? –

+0

是的,當然。我只是舉了一個例子來說明「上」和「下」在同一上下文中的表現。 (「#element」)。off(「click」);'。我只是嘗試使用外部腳本,它成功解除了事件綁定,所以讓我更新我的答案:) – krankuba