2010-05-14 4 views
5

양식에 값 입력 필드가 있는지 확인한 다음 타자기 플러그인을 사용하여 Ajax 호출을 수행합니다 (사용자가 미리 정의 된 간격). 그것은 위대한 작품.jQuery Ajax : 복사 - 붙여 넣기 thingy

이 입력란은 주문 양식의 '쿠폰 할인'이므로 값을 이메일 또는 기타에서 '쿠폰 코드'를 붙여 복사하여 입력 할 수 있습니다. 또한 Ctrl + C - Ctrl + V로 복사하여 붙여 넣을 수 있지만 사용자가 마우스로 텍스트를 선택하고 상황에 맞는 메뉴에서 복사 한 다음이 메뉴에서 붙여 넣을 때 사용하지는 않습니다.

어떻게 든 jQuery에서 이런 종류의 동작을 확인하는 방법이 있습니까?

답변

1

마지막 체크 이후 값이 변경되었는지 확인하는 낮은 시간 제한 (1 초)을 설정할 수 있습니다.

당신은 또한 그것을 무시하고 폼이이 쿠폰 할인 입력의 내용을 잡고 제출할 때이를 무시할 수 있습니다.

0

이전에 비슷한 문제가있었습니다. 내가 아는 한 브라우저는 사용자가 마우스 오른쪽 버튼을 클릭하여 붙여 넣을 때 이벤트를 발생시키지 않으며 이전에 사용 된 값 목록에서 선택할 때 이벤트도 발생시키지 않습니다.

나는 이벤트 처리기를 blur 이벤트에 추가 바인딩하여 충분히 좋은 결과를 얻었습니다. 이 경우에 잡히지 않은 유일한 경우는 마우스로 값을 붙여 넣은 다음 Enter 키를 눌러 제출합니다. 좀 해커를 통해이 문제를 해결 얻을 수있었습니다 : jQuery를 그들이 결합 된 순서에 이벤트를 실행하기 때문에

$(element) 
    .bind('keydown blur', handlerFunction) 
    .keydown(function(event) { 
    if (event.keyCode === 13 /* Enter Key */) { 
     event.preventDefault(); 
     event.stopPropagation(); 
    } 
    }) 
    .keyup(function(event) { 
    if (event.keyCode === 13 /* Enter Key */) { 
     $(this).closest('form').submit(); 
    } 
    }); 

기본적으로이 작동합니다. 일반적으로 양식 제출은 Enter 키 누르기의 keydown에서 수행됩니다. keyup 처리기에 마법을 적용 할 시간을주기 위해 keyup 이벤트가 발생할 때까지 양식 제출을 지연해야하므로 다른 keyup 핸들러가 먼저 실행될 수 있습니다.

이제 사용자 이벤트에 반응하기 전에 지연을 추가하는 플러그인을 사용한다고하셨습니다. 즉,이 기술을 축 어적으로 사용하지 못할 수도 있습니다. 대신 작동 할 수있는 한 가지 방법은 양식을 제출하도록 허용하기 전에 직접 처리기 함수를 호출하는 것입니다. 조쉬 K 이전에 언급 한 바와 같이, 당신은 단순히 비슷한 뭔가를 양식에 제출 이벤트에 뭔가를 결합 할 수

.keyup(function(event) { // Part 2 
    if (event.keyCode === 13 /* Enter Key */) { 

     handlerFunction.call(this, event); // force it to happen now 

     $(this).closest('form').submit(); 
    } 
    }); 

: 그렇게하려면, 당신은 마지막의 keyup 처리기를 변경합니다. Ajax를 사용하고 있다면 전달 된 옵션에 async: false을 설정해야합니다. 그렇지 않으면 양식이 진행되어 호출 완료를 기다리지 않고 제출할 것이기 때문입니다.

0

(이 솔루션은 테스트되지 않았으므로!) 나는이 같은 시도를하려는 :명는 브라우저 플러그인으로이 문제를 우회 항상 수 있지만 그것은 그 것을 보장하지 그래서,

var keys_pressed = 0; // count the number of key press events 
var required_keys_pressed = 10; 
$('#yourinputElement').keydown (function() { 
    keys_pressed++; // add one 
}); 
$('#yourform').submit (function() { 
    if (keys_pressed < required_keys_pressed) 
    { 
    // not enough keys pressed or was a CTRL + v 
    } 
    else 
    { 
    // required number of keys pressed for your code 
    } 
}); 

가 기억을 네가 원하는대로 갔어. 항상 일종의 서버 측 유효성 검사 수행

관련 문제