0

I'm suspecting that some jQuery plugins that I'm using are interfering with my keyboard arrow key presses by having specific events bound.

Assuming I don't care about breaking whatever it is they're doing, how can I unbind all events for, say, the left and right arrow key presses?

How would one debug or see a list of events that are fired upon key pressing? (I don't know which lines of code are currently handling the key presses, if any)

4

4 に答える 4

1

他のバインドされたキー押下イベントに影響を与えることなく、バインドを解除できます。

$(document).unbind("keypress.key37");
$(document).unbind("keypress.key39");

これは名前空間イベントと呼ばれます。つまり<event_name>.<namespace>、(この場合は「keypress.key37&keypress.key39」)を使用して特定のバインディングにラベルを付けます。

于 2012-12-18T06:14:54.397 に答える
0

ページのどこかにフォーカスしているときに矢印キーがトリガーされた場合、イベントハンドラーはおそらくウィンドウまたはドキュメントにバインドされ、次のようにバインド解除されます。

$(window).unbind('keydown');
$(document).unbind('keydown');

「左」または「右」矢印キーでのみイベントのバインドを解除する場合は、次のようにイベントを停止できます。

$(window).bind('keydown', function(e){
    switch(e.keyCode) {
        case 37: // left arrow
            e.preventDefault;
            e.stopPropagation;
            break;
        case 39: // right arrow
            e.preventDefault;
            e.stopPropagation;
            break;
    }
});
于 2012-12-18T05:56:35.327 に答える
0

これらのイベントがどこにバインドされているか (またはバインドされている場合でも) を見つけるためにデバッグすることをお勧めします。これらが jQuery にバインドされている場合、.data(); を介して表示できます。

たとえば、コンソールで:

$('.suspected.element').data().events

主要なイベントが何らかのプラグインによる真の原因である場合、回避策を追加するのではなく、イベントのバインディングを変更することを検討します。

于 2012-12-18T06:06:24.880 に答える