이전에 비슷한 문제가있었습니다. 내가 아는 한 브라우저는 사용자가 마우스 오른쪽 버튼을 클릭하여 붙여 넣을 때 이벤트를 발생시키지 않으며 이전에 사용 된 값 목록에서 선택할 때 이벤트도 발생시키지 않습니다.
나는 이벤트 처리기를 blur 이벤트에 추가 바인딩하여 충분히 좋은 결과를 얻었습니다. 이 경우에 잡히지 않은 유일한 경우는 마우스로 값을 붙여 넣은 다음 Enter 키를 눌러 제출합니다. 좀 해커를 통해이 문제를 해결 얻을 수있었습니다 : jQuery를 그들이 결합 된 순서에 이벤트를 실행하기 때문에
$(element)
.bind('keydown blur', handlerFunction)
.keydown(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
event.preventDefault();
event.stopPropagation();
}
})
.keyup(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
$(this).closest('form').submit();
}
});
기본적으로이 작동합니다. 일반적으로 양식 제출은 Enter 키 누르기의 keydown에서 수행됩니다. keyup 처리기에 마법을 적용 할 시간을주기 위해 keyup 이벤트가 발생할 때까지 양식 제출을 지연해야하므로 다른 keyup 핸들러가 먼저 실행될 수 있습니다.
이제 사용자 이벤트에 반응하기 전에 지연을 추가하는 플러그인을 사용한다고하셨습니다. 즉,이 기술을 축 어적으로 사용하지 못할 수도 있습니다. 대신 작동 할 수있는 한 가지 방법은 양식을 제출하도록 허용하기 전에 직접 처리기 함수를 호출하는 것입니다. 조쉬 K 이전에 언급 한 바와 같이, 당신은 단순히 비슷한 뭔가를 양식에 제출 이벤트에 뭔가를 결합 할 수
.keyup(function(event) { // Part 2
if (event.keyCode === 13 /* Enter Key */) {
handlerFunction.call(this, event); // force it to happen now
$(this).closest('form').submit();
}
});
: 그렇게하려면, 당신은 마지막의 keyup 처리기를 변경합니다. Ajax를 사용하고 있다면 전달 된 옵션에 async: false
을 설정해야합니다. 그렇지 않으면 양식이 진행되어 호출 완료를 기다리지 않고 제출할 것이기 때문입니다.