0

以下代码仅在一个问题上“正常”工作。每当触发 keyup 事件时,目标键仍会继续响应任何 keyup 或 keydown 事件,而所有其他键都变得无响应。好像我在这里遗漏了一些解除绑定,但无法弄清楚。我试过off()and unbind(),但没有成功。

目的是如果按下这些键,它们会触发,但所有其他键不应该冻结。

var delta = 500; // time interval since the last keyup event
var lastKeypressTime = 0; // double enter flag set    
$( this ).on( "keyup", function (event) {
event.preventDefault();
    if (event.keyCode == 37)
    {
        $(' a.left' ).css( "opacity", "0.5" ).trigger( 'click' );
    } else if (event.keyCode == 39)
    {
        $(' a.right' ).css( "opacity", "0.5" ).trigger( 'click' );
    }
    else if (event.keyCode == 13)
    {
        var thisKeypressTime = new Date();
        $( ' div div.active a.readon' ).focus();
        if (thisKeypressTime - lastKeypressTime <= delta)
        {
            $(' div div.active a.readon' )[0].click();
            thisKeypressTime = 0;
        }
        lastKeypressTime = thisKeypressTime;
    }
} );
4

1 回答 1

0

因此,通过将条件之前的条件移到它内部的键中,找到了导致不需要的行为的问题,event.preventDefault();应该防止默认值。

var delta = 500; // time interval since the last keyup event
var lastKeypressTime = 0; // double enter flag set    
$( this ).on( "keyup", function (event) {
    if (event.keyCode == 37)
    {
        event.preventDefault();
        $(' a.left' ).css( "opacity", "0.5" ).trigger( 'click' );
    } else if (event.keyCode == 39)
    {
        event.preventDefault();
        $(' a.right' ).css( "opacity", "0.5" ).trigger( 'click' );
    }
    else if (event.keyCode == 13)
    {
        var thisKeypressTime = new Date();
        $( ' div div.active a.readon' ).focus();
        if (thisKeypressTime - lastKeypressTime <= delta)
        {
            $(' div div.active a.readon' )[0].click();
            thisKeypressTime = 0;
        }
        lastKeypressTime = thisKeypressTime;
    }
} );
于 2013-08-11T14:35:33.233 回答