Keypress 컨텍스트의 JavaScript 감지 (Form History 선택 vs. 양식 제출)
-
03-07-2019 - |
문제
제가 작업중 인 프로젝트의 개발 속도를 높이기 위해 jQuery를 사용하여 반 게릭 양식 플러그인을 작성하고 있습니다.
계획은 a jtemplates 템플릿에는 필드가 포함되어 있고, 내 플러그인은 템플릿을 통해 필요한 다국어 리소스를 찾아 서버에서 요청한 다음 JavaScript 객체로 모든 것을 포장 한 다음 "제출"에서 사용자 정의 함수로 전달됩니다.
Enter가 눌렀을 때 표준을 제외하고는 모든 것이 잘 작동합니다. 양식을 제기 할 때해야 할 코드를 제출하십시오.
opts.coreElement.find('input[type=text]').keypress(function(evt) {
if ((evt.keyCode || evt.which) == 13) {
opts.coreElement.find('.saveButton').click();
}
});
문제는 Firefox에서 (적어도 다른 브라우저를 아직 확인하지 않았다), 이전에 비슷한 이름을 지은 텍스트 상자에 정보를 입력 한 경우 양식 기록을 얻는다는 것입니다. 그런 다음 ENTER를 누르면 제안 된 값 중 하나를 선택하면 양식을 제출합니다. 페이지의 첫 입력에 있다면 좋지 않습니다. 실제로는 실제로 성가시다.
명백한 해결책은 필드 주위에 형태 요소를 삽입하고 jQuery를 통해이 더미 형태의 가능한 제출을 중지하는 것 같습니다. 다행히도 ASP.NET MVC에있는 것처럼이 작업을 수행하는 사치가 있지만 그렇지 않은 경우 어떻게해야합니까? 내 플러그인이 이미 양식 안에 있는지 모르고 스스로를 유지해야한다면 어떨까요? 내가 표준 webforms asp.net에 있었다면 어떨까요? 가졌다 올바른 제출 버튼에 대한 각 입력의 리턴 키를 수동으로 "타겟팅"하려면?
아마도 이벤트 객체 자체를 통해 키 프레스의 컨텍스트를 감지하여 양식 히스토리 항목의 선택을 필터링 할 수있는 방법이 있습니까?
해결책
설정 autocomplete
텍스트 필드의 속성 off
:
opts.coreElement.find('input[type=text]').each(function() {
$(this).attr('autocomplete', 'off');
});
이것은 모든 주요 브라우저 (Safari, Firefox, IE)에서 작동합니다.
다른 팁
Enter] 또는 [탭] 키 이벤트의 기본 조치를 방지하려면 키 다운 이벤트를 듣고 처리/취소해야합니다.
KeyUp 또는 Keypress가 트리거 될 때까지 KeyDown의 기본값이 이미 발생했습니다.
Wulong의 답변은 효과가 있지만 질문에 완전히 답하지는 않았습니다. 제안 된 솔루션은 입력 텍스트 필드의 기록을 비활성화하는 것입니다. 그러나 KeyPressed 이벤트가 입력 텍스트 나 역사에서 나오는지 알 수있는 방법이 있습니까?