[javascript] HTML 양식에 텍스트 붙여 넣기 비활성화

JavaScript를 사용하여 HTML 양식의 텍스트 필드에 텍스트를 붙여 넣는 기능을 비활성화하는 방법이 있습니까?

예를 들어 사용자가 이메일을 두 번 입력해야하는 간단한 등록 양식이 있습니다. 두 번째 이메일 항목은 첫 번째 이메일 항목에 오타가 없는지 확인하는 것입니다. 그러나 사용자가 이메일을 복사 / 붙여 넣기하면 목적에 맞지 않으며 사용자가 잘못된 이메일을 입력하고 복사 / 붙여 넣기 때문에 문제가 발생했습니다.

내 질문에 대해 명확하지 않았지만 사람들이 브라우저에서 텍스트를 복사 (또는 드래그 선택)하는 것을 막으려는 것은 아닙니다. 사용자 오류를 최소화하기 위해 텍스트 필드에 입력을 붙여 넣는 것을 중지하고 싶습니다 .

아마도이 “해킹”을 사용하는 대신 내가 여기서 해결하려는 핵심 문제에 대한 또 다른 해결책을 제안 할 수 있습니까? 나는 6 개 미만의 사용자 테스트를 수행했으며 이것은 이미 두 번 발생했습니다. 내 청중은 컴퓨터에 능숙하지 않습니다.



답변

최근에 양식 요소에 붙여 넣기를 마지 못해 비활성화해야했습니다. 이를 위해 Internet Explorer (및 기타) onpaste 이벤트 핸들러의 브라우저 간 * 구현을 작성했습니다. 내 솔루션은 타사 JavaScript 라이브러리와 독립적이어야했습니다.

여기에 제가 생각 해낸 것이 있습니다. 붙여 넣기를 완전히 비활성화하지는 않지만 (예를 들어 사용자가 한 번에 하나의 문자를 붙여 넣을 수 있음) 내 요구를 충족하고 keyCode 등을 처리 할 필요가 없습니다.

// Register onpaste on inputs and textareas in browsers that don't
// natively support it.
(function () {
    var onload = window.onload;

    window.onload = function () {
        if (typeof onload == "function") {
            onload.apply(this, arguments);
        }

        var fields = [];
        var inputs = document.getElementsByTagName("input");
        var textareas = document.getElementsByTagName("textarea");

        for (var i = 0; i < inputs.length; i++) {
            fields.push(inputs[i]);
        }

        for (var i = 0; i < textareas.length; i++) {
            fields.push(textareas[i]);
        }

        for (var i = 0; i < fields.length; i++) {
            var field = fields[i];

            if (typeof field.onpaste != "function" && !!field.getAttribute("onpaste")) {
                field.onpaste = eval("(function () { " + field.getAttribute("onpaste") + " })");
            }

            if (typeof field.onpaste == "function") {
                var oninput = field.oninput;

                field.oninput = function () {
                    if (typeof oninput == "function") {
                        oninput.apply(this, arguments);
                    }

                    if (typeof this.previousValue == "undefined") {
                        this.previousValue = this.value;
                    }

                    var pasted = (Math.abs(this.previousValue.length - this.value.length) > 1 && this.value != "");

                    if (pasted && !this.onpaste.apply(this, arguments)) {
                        this.value = this.previousValue;
                    }

                    this.previousValue = this.value;
                };

                if (field.addEventListener) {
                    field.addEventListener("input", field.oninput, false);
                } else if (field.attachEvent) {
                    field.attachEvent("oninput", field.oninput);
                }
            }
        }
    }
})();

붙여 넣기를 비활성화하기 위해 이것을 사용하려면 :

<input type="text" onpaste="return false;" />

* oninput이 W3C DOM 사양의 일부가 아니라는 것을 알고 있지만이 코드를 테스트 한 모든 브라우저 (Chrome 2, Safari 4, Firefox 3, Opera 10, IE6, IE7)는 oninput 또는 onpaste를 지원합니다. 이 모든 브라우저 중에서 Opera만이 onpaste를 지원하지 않지만 oninput을 지원합니다.

참고 :이 기능은 온 스크린 키보드를 사용하는 콘솔이나 다른 시스템에서는 작동하지 않습니다 (각 키가 선택 될 때 온 스크린 키보드가 브라우저로 키를 전송하지 않는다고 가정). 화면 키보드와 Opera (예 : Nintendo Wii, 일부 휴대 전화)가있는 사람이 페이지 / 앱을 사용할 수있는 경우 화면 키보드를 확인하기 위해 테스트 한 경우가 아니면이 스크립트를 사용하지 마세요. 각 키 선택 후 브라우저에 키를 보냅니다.


답변

하지마. 사용자의 브라우저를 건드리지 마십시오. 전자 메일 확인 필드에 복사 + 붙여 넣기를하면 사용자는 입력 내용에 대한 책임을집니다. 그들이 잘못된 주소를 복사하고 붙여 넣을만큼 멍청하다면 (나에게 일어난 일이다) 그것은 그들 자신의 잘못이다.

이메일 확인이 제대로 작동하는지 확인하려면 사이트가 기다리는 동안 사용자에게 이메일을 확인하도록합니다 ( “새 창에서 웹 메일 프로그램을여십시오”). 이메일 주소를 굵은 글씨로 표시합니다 ( “확인 이메일을 보냈습니다 …. 오류가 발생 했습니까? 변경하려면 여기를 클릭하십시오).

더 좋은 방법은 가능하다면 사용자에게 확인없이 제한된 액세스 권한을 부여하는 것입니다. 이렇게하면 즉시 로그인 할 수 있으며 다른 이유 (예 : 스팸 필터)로 인해 확인 메일이 차단 된 경우에도 방문자와 계속 연락 할 수있는 기회가 향상됩니다.


답변

복사 붙여 넣기 기능을 비활성화하려는 입력에 ‘disablecopypaste’클래스를 추가하고이 jQuery 스크립트를 추가합니다.

  $(document).ready(function () {
    $('input.disablecopypaste').bind('copy paste', function (e) {
       e.preventDefault();
    });
  });


답변

방금 얻었습니다 onpaste:"return false". http://sumtips.com/2011/11/prevent-copy-cut-paste-text-field.html 덕분에을 사용하여 달성 할 수 있습니다 .

아래와 같이 다양한 옵션을 사용할 수 있습니다.

<input type="text" onselectstart="return false" onpaste="return false;" onCopy="return false" onCut="return false" onDrag="return false" onDrop="return false" autocomplete=off/><br>


답변

당신은 …..하지만 할 수 없습니다.

사용자 브라우저의 기본 동작을 변경해서는 안됩니다. 웹 응용 프로그램의 유용성이 정말 좋지 않습니다. 또한 사용자가이 해킹을 비활성화하려면 브라우저에서 자바 스크립트를 비활성화하면됩니다.

이 속성을 텍스트 상자에 추가하기 만하면됩니다.

ondragstart=”return false onselectstart=”return false


답변

미친 아이디어 : 사용자가 가입 과정의 일부로 이메일을 보내도록 요구합니다. 이는 mailto 링크를 클릭해도 작동하지 않을 때 분명히 불편할 수 있지만 (예를 들어 웹 메일을 사용하는 경우), 오타를 방지하고 이메일 주소를 확인하는 동시에 방법으로 간주됩니다.

다음과 같이 진행됩니다. 대부분의 양식을 작성하고 이름, 비밀번호 및 기타 정보를 입력합니다. 제출을 푸시하면 실제로 링크를 클릭하여 서버로 메일을 보냅니다. 이미 다른 정보를 저장 했으므로 메시지에는이 계정이 어떤 계정에 해당하는지 알려주는 토큰 만 포함됩니다.


답변

사이트에 확인 URL 링크가있는 사용자가 방금 두 번 입력 한 이메일 주소로 확인 이메일을 보내는 것은 어떻습니까? 그러면 그들이 메시지를 받았다는 것을 알고 있습니까?

이메일 수신 확인을 위해 클릭하지 않는 사람은 이메일 주소를 잘못 입력했을 수 있습니다.

완벽한 솔루션은 아니지만 몇 가지 아이디어입니다.