2012-03-12 7 views
10
$(window).keydown(function(event){ 
    if(event.keyCode == 13) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

위의 내용은 시스템 전체에서 양식 제출자로 "입력"키를 효과적으로 제거하는 코드입니다. 내가 원하는. 그러나 사용자가 다음 행으로 이동하기 위해 입력해야하는 텍스트 영역 태그에서도 Enter 키가 비활성화되어 있습니다. 그래서 위의 코드를 수정하여 입력이 textarea 태그에서 오는 경우이를 감지하고 event.preventDefault()를 실행하지 않습니다. 선?"Enter"가 양식을 제출하는 것을 금지하지만 textarea 필드 (jQuery)에서 허용합니다.

나는 사이트 전체에서 너무 많은 양식을 가지고 있습니다. 개별적으로 구성해야만 악몽이되고 어쩌면 말이되지 않을 것입니다. 보편적 인 방법이 있어야합니다. 위 코드는 사이트의 모든 단일 페이지에서 실행되어 "enter"를 눌러 우발적 인 제출을 방지합니다. enter code here

답변

10

은 내가 왜 그냥 대신 트리거에서 폼의 submit 이벤트를 차단 사용 ... event.target 재산

$(window).keydown(function(event){ 
    if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

demo

+0

가 꽤 작업나요 - 타격 일반 입력 필드에 입력 양식을 제출하는 내가 원하는 것이 아니다. – jeffkee

+1

은'textarea'가 정의되어 있습니까? – rjz

+0

@jeffkee는 데모로 답변을 업데이트했습니다. 코드는 – Rafay

0

keyup 이벤트를 선호 ?

$('form').submit(function(event){ 
    event.preventDefault(); 
}); 
+0

입력 버튼 유형에 따라 제출되는 양식이 있으므로 제출할 수 없습니다. 모든 제출물이 자바 스크립트 지향적 인 것은 아닙니다 (대부분 폼 유효성 검사로 인한 것이지만). – jeffkee

3

3nigma의 솔루션은 잘 작동 것 @ 그러나 여기이 동작 달성하는 또 다른 방법 :

$(function(){ 
    $('#myform').find('input,select').keydown(function(event){ 
     if (event.keyCode == 13){ 
      event.preventDefault(); 
     } 
    }); 
}); 
1

이 이벤트 객체와 사용할 수있는 좋은 기회 것 같아 메스를 같은 대포와 같은 접근 방식 대신이 모기에 접근합니다. 이 같은

, 뭔가 :

... 
// Only watch for a bad type of submission when a submission is requested. 
$('form .contact-form').submit(function(e){ 
    // If a submit is requested, and it's done via keyboard enter, stop it. 
    if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code 
     e.preventDefault(); // Prevent the submit. 
    } 
    // All other mouse actions just go through. 
}); 

여기 장점은 당신이 양식을 제출하지 않는 어디서나 Enter 키를 누르십시오 경우, 모르는이 코드는하지 않는, 상대적으로 명백해야한다 걱정하지 마십시오.

7

당신은 바이올린이 here 인이

$(document).ready(function(){ 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA') 
     { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

을 시도 할 수 있습니다.

+1

이것은 첫 번째 텍스트 영역에만 일치하지 않으므로 잘 작동합니다. 그것은 페이지의 모든 텍스트 영역을 포함합니다. 고마워. –

1

나는 이것이 가장 잘 작동 함을 발견했다. 특히 다른 요소에서 Enter 키 동작을 사용하여 양식을 다시 보내지 않으려는 경우. 나는 3nigma의 대답을 확대하고 있습니다.

$("form").keypress(function (event) { 
      if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) { 
       return false; 
      } 
     }); 
2
$('#form_editar').keypress(function(e) { 
    var allowEnter = {"textarea": true, "div": true}; 
    var nodeName = e.target.nodeName.toLowerCase(); 

    if (e.keyCode == 13 && allowEnter[nodeName] !== true) { 
     e.preventDefault(); 
    } 
}); 

내가 조금, 내가 WYSIWYG 에디터를 위해 사업부를 사용 @The 알파에서 편집 :) ...