2011-09-27 2 views
0

다음은 사용중인 유효성 검사 방법의 예입니다.다른 텍스트 상자를 잠그지 않고 유효성 검사를받는 텍스트 상자에 중점을 둘 수 있습니까?

 if(currentFieldCategory=='e') 
    { 
     var atpos=currentFieldValue.indexOf("@"); 
     var dotpos=currentFieldValue.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=currentFieldValue.length) 
     { 
      echo('Please enter a valid email address'); 
    currentField.focus(); 
      return 'Please enter a valid email address'; 
     } 
    } 

사용자가 유효한 전자 메일을 입력하지 않으면 오류 메시지가 표시됩니다. currentField.focus() 사용; 유효성 검사중인 현재 텍스트 상자에 포커스가 유지되지만 올바른 데이터가 입력 될 때까지 다른 모든 텍스트 상자는 잠겨 있습니다.

다른 텍스트 상자를 잠그지 않고 (즉, 사용자가 다른 텍스트 상자에서 계속 클릭 할 수 있음) 현재 텍스트 상자에 포커스를 유지하는 방법이 있는지 궁금합니다. 사용자 입력과 양식 제출 모두에서 내 유효성 검사가 수행되기 때문에 현재 텍스트 상자에 올바른 데이터가 포함되어 있지 않은 경우에도 다른 텍스트 상자를 클릭해도 괜찮습니다.

누군가 도와 드릴까요?

고마워요,

답변

0

귀하의 요구 사항은 모순 된 것 : 당신은 하나 개의 입력에 "초점을 유지"하고 동시에 사용자가 다른 입력에 클릭 할 수 없습니다.

특정 필드가 유효하지 않은 경우 유효성 검사 기술이 onchange 또는 onblur 인 경우 배경색을 다른 색으로 설정하거나 오류 메시지 옆에 오류 메시지를 표시하십시오. 그런 다음 사용자는 다시 올 필요가있는 필드를 알고 있지만 다른 필드를 먼저 입력 할 수 있습니다.

그렇다면 초점 아이디어에 정말 관심이 있다면 처음으로 사용자가 필드를 벗어나려고 할 때만 포커스를 설정할 수 있습니다. 그들이 필드를 다시 떠나려고하면 그것을 허용하십시오.

// global (or at least a higher scope variable) to keep track of which 
// fields have failed; I assume your fields all have IDs set 
var invalidFields = {}; 


// within your validation function 
if(currentFieldCategory=='e') 
{ 
    var atpos=currentFieldValue.indexOf("@"); 
    var dotpos=currentFieldValue.lastIndexOf("."); 
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=currentFieldValue.length) 
    { 
     echo('Please enter a valid email address'); 
     // NEW IF TEST 
     // only set focus if this field didn't already fail validation 
     if (!invalidFields[currentField.id]) { 
     invalidFields[currentField.id] = true; 
     currentField.focus(); 
     } 
     return 'Please enter a valid email address'; 
    } 
    invalidFields[currentField.id] = false; 
} 

참고 : invalidFields이 currentField의 ID에 대한 (아직) 정의 된 키를 가지고 있지 않거나은 해당 정의 키를 가지고있는 경우 경우 테스트, !invalidFields[currentField.id]는 사실 될 경우 새로운의 표현 false의 값 즉, 이전에 검증 된 적이 없거나 마지막으로 유효성이 확인 된 경우입니다.

(덧붙여서, 최초의 "@"와 마지막 "."의 위치를 ​​수동으로 비교하는 것이 아니라, 정규 표현에 의한 검증 형식을 조사해야합니다.)

관련 문제