2013-08-20 3 views
5

사용자가 입력란에 값을 붙여 넣기를 원치 않는 입력란이 있습니다. 다음 jQuery 코드를 사용하고 있으며 데스크톱 브라우저 및 iPhone Safari에서 잘 작동합니다. 문제는 안드로이드 브라우저에서 작동하지 않는다는 것입니다.JQuery를 사용하여 Android 브라우저에서 '붙여 넣기'를 사용 중지하는 방법은 무엇인가요?

$('#no_paste').bind("paste", function(e) {     
     e.preventDefault(); 
}); 

는 여기가 paste 이벤트를 전송하지 않는 것 갤럭시 SIII 및 안드로이드 브라우저에서이 테스트 한 fiddle

+0

나는 그것이 질문과 관련이 없다는 것을 알고 있지만 왜 붙여 넣기를 비활성화합니까? –

+0

글쎄, 전자 메일 확인, 암호 확인 같은 입력 필드는 붙여 넣기로되어 있지 않습니다. – CalebC

+1

나는 그것에 동의하는지 모르겠다. 생각을위한 음식 : [사용자가 클립 보드에서 필수 양식 필드로 붙여 넣지 못하도록] (http://ux.stackexchange.com/q/21062/4487), [사용자가 복사/붙여 넣기를 등록 양식 전자 메일 필드?] (http://ux.stackexchange.com/q/1488/4487) –

답변

1

입니다. 그러나 붙여 넣은 후에도 여전히 input 이벤트를 보냅니다.

사용자가 필드에 입력하는 경우 각 문자에 대해 하나의 input 이벤트가 발생합니다. 그러나 붙여 넣을 경우 input 이벤트는 붙여 넣은 전체 문자열에 대해 한 번만 실행됩니다. 이 관찰을 근거로하여 우리는 다음과 같이 붙여 넣기를 차단할 수 있습니다

$('#ie').bind("input", function() { 
    var previousValue = $(this).data('old_value') || '', 
     newValue = $(this).val(); 

    if((newValue.length - previousValue.length) > 1) { 
     $(this).val(previousValue); 
    } 

    $(this).data('old_value', $(this).val()); 
}); 

당신은 JSFiddle here 찾을 수 있습니다.

이것도 자동 완성과 유사한 방식으로 작동하는 다른 모든 이상한 입력 기술을 차단합니다 (나는 거의 알지 못합니다).

+0

좋은 해킹! 그러나 사용자가 한 글자를 붙이면 여전히 작동 할 것입니다. – CalebC

+0

@CalebC 물론, '붙여 넣기'방지를 피하기 위해 편지로 전체 이메일/비밀번호를 붙여 넣기 만한다고 믿기는 어렵습니다. 그렇게하는 것은 타이핑보다 훨씬 복잡하고 성가신 일입니다. 그렇다면 요점은 무엇입니까? 그러나 만약 당신이 정말로 하나의 글자만을 기대하는 입력 필드를 가지고 있다면 간단히 그렇게하라 :'input' 이벤트가 보내졌지만'keydown' 이벤트가 보내지지 않았다면 그 이벤트를'paste'로 분류 할 수 있습니다. –

+0

충분히 공정하게, 나는 이것을 답으로 표시 할 것이다. – CalebC