2012-02-20 3 views
0

저는 프로젝트에서 일하고 있으며 입력 된대로 필드에 사용자가 입력 한 데이터의 존재를 감지하기 위해 만든 jQuery 이벤트 처리기가 있습니다. 그 일이 왜 이상한 지에 대해 조금 당황 스럽다.필드에 값의 존재 여부가 jQuery 테스트에서 제대로 작동하지 않습니다.

내가 작성한 루틴은 다음과 같습니다.

$(document).ready(function() { 
    $('#salary_bal').on('change blur keydown', function() { 
    if($(this).val.length === 0 || $(this).val() === '') { 
     setSubmitState('off'); 
    } else { 
     setSubmitState('on'); 
    } 
    }); 
}); 

function setSubmitState(state) { 
    switch(state) { 
    case 'on': 
     $('#fsSubmit').attr('disabled', false); 
     $('#fsSubmit').addClass('button'); 
     $('#fsSubmit').addClass('cursor'); 
    break; 
    case 'off': 
     $('#fsSubmit').attr('disabled', true); 
     $('#fsSubmit').removeClass('button'); 
     $('#fsSubmit').removeClass('cursor'); 
    break; 
    } 
} 

당신은 아마 setSubmitState의 호출에 의해 추측 수 있듯이 바운드 필드에 값이없는 경우,이 양식의 제출 버튼을 비활성화해야합니다.

내가 말했듯이 이것은 "일종의"일을 올바르게합니다. 걸리는 부분은 새로 입력 된 문자 대신에 입력 된 이전 문자에 응답하는 것처럼 실제로 작동한다는 것입니다.

다음은 동작 순서와 해당 결과입니다.

  1. 필드에 'x'를 하나만 입력하십시오.
    • 제출 단추가 사용 가능하게되지 않습니다.
  2. 필드에 다른 'x'를 입력하십시오.
    • 제출 단추가 사용으로 변경됩니다.
  3. 'x'를 백 스페이스로 삭제하십시오.
    • 제출 버튼을 사용할 수 있습니다.
  4. 다시 공백으로 남겨둔 백 스페이스.
    • 제출 버튼을 사용할 수 있습니다.
  5. 백 스페이스 한 번 더.
    • 제출 단추가 사용 안함으로 변경됩니다.

나는이 문제를 디버깅하려고 벽에 내 머리를 두드리는 된 내 바퀴를 회전의 피곤하고 있습니다. (벽의 두통은 말할 것도 없습니다.) 누구든지이 문제에 대한 해결책을 제시 할 수 있습니까?

+0

Keydown이 keyup이어야하므로 새로 삽입 된 캐릭터가 이벤트를 발생시킵니다. Keydown은 키 업 전에 실행되고 키 업 후에 문자에 입력됩니다. –

+0

keyup을 사용하면 해당 기능이 없다는 오류가 표시됩니다. – Skittles

+0

긁힘. O.o 나는 그것이 왜 효과가 있었는지 모른다. 나는 전에 그 오류를 얻고 있었지만, 지금은 그렇지 않습니다. 그것은 단지 열매입니다. 감사합니다 – Skittles

답변

0

Keydown은 keyup이어야하며 새로 삽입 된 문자 다음에 이벤트가 발생합니다. Keydown은 키 업 전에 실행되고 키 업 후에 문자에 입력됩니다.

관련 문제