2011-02-04 115 views
3

我有一個jQuery的對話,其中如下初始化熱鍵:jQuery熱鍵 - 解除綁定?

<script type="text/javascript"> 
    $(document).bind('keydown', '<%=(i+1)%>',function (evt) { 
    // do stuff 
    }); 
</script> 

這遍歷1-9 ...

問題是,如果你關閉對話框,然後重新打開對話框。它保持重新綁定,所以當你對'1'進行一次按鍵時,它會運行兩次,三次,四次等......它只是在不斷增長。

我試着用

$(document).unbind('keydown', '1'); 
$(document).unbind('keydown', '2'); 
$(document).unbind('keydown', '3'); 
$(document).unbind('keydown', '4'); 
$(document).unbind('keydown', '5'); 
$(document).unbind('keydown', '6'); 
$(document).unbind('keydown', '7'); 
$(document).unbind('keydown', '8'); 
$(document).unbind('keydown', '9'); 

殺戮對話框關閉鍵綁定但是,沒有任何效果。有關如何處理這個問題的任何想法?

感謝

+0

你試過`.die()`http://api.jquery.com/die/ – Rafay 2011-02-04 19:18:14

回答

3

請注意,.unbind()不支持eventData參數,這就是爲什麼您的unbinds不起作用。

在我頭頂,你有兩種不同的方法。如果這是唯一的文檔級別的keydown綁定,您可以到「滿」解除綁定如下:

$(document).unbind('keydown'); // unbinds *all* keydown handers on the document 

或者,您也可以將您的keydown的處理程序存儲爲一個非匿名函數,並保持一個參考各地傳遞迴到關閉對話框時解除綁定:

function onkeydown(evt) { 
    // do stuff 
} 

$(document).bind('keydown', '<%=(i+1)%>', onkeydown); 

// later, in the dialog's "shutdown" code: 
$(document).unbind('keydown', onkeydown); 

我不是100%肯定的是如何在相同的功能,勢必多次這個作品,但是。你可能更好的辦法是在你的事件處理程序中刪除eventData並使用event.which來確定哪個鍵被按下(然後只需要處理程序被綁定一次)。

0

您可以使用

<script type="text/javascript"> 
$(document).ready(function() { 
    $(document).bind('keydown', '<%=(i+1)%>',function (evt) { 
     // do stuff 
    }); 
}); 
</script> 

這種方法結合事件文件加載時一次。

1

我在「keydown.g」使用的keydown事件命名空間連同一個()

注意.G解決類似的問題。這將它放在一個單獨的範圍內,我可以稍後取消綁定而不解除文檔中每個關鍵點的綁定。

$(document).one("keydown.g", function(e) { 
// tab key 
if (e.which == "9") { 
    e.preventDefault(); 
    // do something like focus on a field 
    $("#target").focus(); 
    // once you've moved the focus, you can unbind and go back to tabbing normally 
    $(document).unbind("keydown.g"); 
} 
}); 

< 3 jQuery的