2016-09-13 6 views
2

나는 계속 찾을 JQuery와에 키를 누르면 입력해야합니다. 이것이 가능한가? 여기jquery를 사용하여 여러 번 키 입력을 금지하는 방법?

$('#password-input').keyup(function(e) { 
    if (e.which == 13) { 
     alert("Enter key") 
    } 
}); 

내가 을 누르면입니다 경우 키 한 번 이상 내가 두 번 경고를 얻고 의미를 누릅니다. 하지만 한 번만해야합니다.

도와주세요!

+1

더 동시에 :)에 1 회) – madalinivascu

답변

0

디스플레이 경고에 대한 지연을 설정하는 상태

var pressed = false; 
$('#password-input').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter key'); 
     } 
    } 
}); 
0

을 사용 .setTimeout()를 저장하는 변수를 사용합니다. 지연 시간에 Enter 키를 다시 누르면 이전 타임 아웃을 제거하고 새 타임 아웃을 설정합니다. 시간 초과가 끝나면 경보를 표시합니다.

var interval; 
 
$('#password-input').keyup(function (e) { 
 
    if (e.which == 13) { 
 
     clearInterval(interval); 
 
     interval = setTimeout(function(){ 
 
      alert("Enter key") 
 
     }, 500); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input id="password-input" />

당신은 사용자 정의 시간에 지연 시간을 변경할 수 있습니다.

3

당신은 최종 사용자를 대가이 (가) "키 입력"여러 번을 방지하기 위해 "키 입력"때 jQuery#unbind으로 keyup 이벤트를 바인딩을 해제보다 keyup 이벤트를 결합하고 jQuery#bind를 사용할 수 있습니다

var $passwordInput = $('#password-input'); 
 

 
$passwordInput.bind('keyup', function(e) { 
 
    passwordInputKeyupHandler(e); 
 
}); 
 

 
function passwordInputKeyupHandler(e) { 
 
    if (e.which === 13) { 
 
    console.log('Enter key!'); 
 
    $passwordInput.unbind('keyup'); 
 

 
    return setTimeout(function(){ 
 
     console.log('Rebind keyup event'); 
 
     $passwordInput.keyup(passwordInputKeyupHandler); 
 
    }, 2000); 
 
    } 
 

 
    console.log('Any other key...'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input id="password-input" type="password">
코멘트에 @dorado에 의해 지적 가지고 최종 사용자를 방지하기 위해, setTimeout()를 사용하여 2 초 후 '리 바인드'를 만들어 졌다고 는

주 난 당신이 또한 몇 밀리 초 경과 한 경우, 다음 키를 입력하면 다시 당신에게 경고를 준다 눌러 것을 원할 것입니다 가정의 상태를 저장하는 변수를 사용하여 외에도 페이지를 다시로드 ..

+2

보다 당신은 또한'setTimeout'를 사용하여 몇 초 후 '바인딩'할 수 있습니다. – dorado

+0

나는 완전히 .. 그것은 최종 사용자가 내 이벤트 핸들러 함수 내에서 이벤트 트리거를 묶어 페이지 –

+1

의 재 장전을해야 할 것을 방지하기 위해 수행 할 수 최대량 동의하고있다. AJAX 호출이 완료 될 때 Enter 키를 Ajax 호출을 트리거, 누를 때 바인딩 해제 내'input'는, 나는 keyup''에'input'를 리 바인드. Ajax 호출 그래서 난 prematuraly (처음에이 모든 일의 목적을 물리 칠 것)'keyup'를 리 바인드하지 않는 완료되었음을 보장합니다. –

1

를 확인합니다. 이것은 setTimeout에 의해 달성 될 수 있습니다. 예를 들어, Enter 키는 2000ms 간격으로 눌러 진 경우에만 다시 검색됩니다.

var pressed = false; 
$('#input-element').keyup(function(e) { 
    if (!pressed) { 
     if (e.which == 13) { 
      pressed = true; 
      alert('Enter pressed.'); 
      i = setTimeout(function() { 
       pressed = false; 
      }, 2000); 

     } 
    } 
}); 
+0

그 좋은 일. 이 문제에 많은 시간을 할애합니다. 너무 황새 와줘서 고마워. –

+0

당신은에있는 경우 문을 감소시킬 수있다 :'경우 {...}'(누르면 && e.which === 13!). 또한 정의되지 않은'i' 변수에'setTimeout()'을 지정할 필요가 없음을 알아 두십시오. –

+0

당신은 @GokulKumar을 가장 환영합니다. :) – dorado

0
var pressed = false; 
    $('#password-input').on('keyup',function(e) { 
     if (e.which == 13 && !pressed) { 
      pressed = true; 
      alert("Enter key"); 
     } 
    }); 
+1

자세한 내용을 편집하십시오. 코드 전용 및 "시도하십시오"답변은 검색 가능한 콘텐츠가 없으므로 권장하지 않으며 누군가가 "시도해"야하는 이유를 설명하지 않습니다. – abarisone