2014-01-20 1 views
0

유효성 검사가 실패 할 때 동일한 요소에 집중하려고합니다. 여기 내 HTML 코드입니다 :Javascript - 경고 메시지 후 포커스 설정

<input id="potatoes" name="potatoes" value="" type="text" class="tooltip" onblur="Validate('potatoes')" autocomplete='off'>

여기 내 자바 스크립트 코드입니다 :

function Validate(id) { 
var errors = { 
    potatoes : 'enter potatoes', 
    hamburgers : 'enter' 
}; 
if (document.getElementById(id).value === '') { 
    if (id in errors) { 
     alert(errors[id]); 
     //setTimeout(function(){document.getElementById(id).focus();}, 1); 
    } 
} 

} 내가 .focus() 메소드를 사용하여 포커스를 설정하려고했습니다

하지만 그렇지 않습니다 작업. 나는 HTML에서 "onblur"에 의존 할 수 있다고 읽었습니다. Validate() 함수를 호출했을 때, 변경하려고 시도했지만 아무 것도 작동하지 않았습니다.

+1

가능한 중복으로 설정 [경고 후 초점()를 제공하는 방법() ?] (http://stackoverflow.com/questions/7234190/how-to-give-focus-after-an-alert) – pasine

답변

1

여기에 문제가 있습니다. 이 코드는 반복됩니다. 'focus'가 트리거되면 Validate 함수가 다시 호출되어 다른 경고 대화 상자가 표시됩니다. 난 그렇게, 나는 을 통과있어 HTML에서 작동하는 코드

HTML

<input id="potatoes" name="potatoes" value="" type="text" class="tooltip" onblur="Validate(this)" autocomplete='off'>

에게 자바 스크립트

var validating = false; //<-- IMPORTANT 
function Validate(element) { 
var id = element.id; 

var errors = { 
    potatoes : 'enter potatoes', 
    hamburgers : 'enter' 
}; 
if (document.getElementById(id).value === '') { 
    if (id in errors) { 
      if(validating == false) { 
        validating = true 
      alert(errors[id]); 
      setTimeout(function(){ 
       document.getElementById(id).focus(); 
       validating = false; 
      }, 1); 
      } 
    } 
} 
} 

패틴 g 요소와 당신은 내가 할 때 알아야 할 검증 변수를 사용하고 볼 수있는 당신이 ID에 액세스 할 수있는 유효성 검사 기능 단지 (루프 문제로 인해) 초점 문제에 대한

var id = element.id; 

를 호출 언제 유효하지 않은지 확인합니다. 이 함수 유효성 검사 루프에 들어 가지 않도록하자. 그래서 :

1) 외부 VAR 을 확인하는 유효성 검사 기능을 정의하고 false로 설정합니다.

2)이 거짓 검증에만 경우 초점경고를 발사하고, 그 이후의 사실

2

자바 스크립트 기능 alert(string)은 (는) 동기식입니다. 사용자가 경고 메시지에 반응하는 동안 스크립트가 일시 중지됩니다. 특별한 것을 할 필요가 없습니다. 다음 스 니펫이 작동해야합니다.

alert(errors[id]); 
document.getElementById(id).focus(); 

사용자가 경고 메시지를 제출 한 직후 요소에 포커스가 있습니다.

+0

'alert (string)'은 (는) 비동기 적이 지 않으므로 스크립트가 동기이므로 스크립트는 경고 diaolog이 나타날 때까지 기다립니다. 계속 닫으십시오 – semirturgay

+0

그냥 철자가 잘못되었습니다 ... 고마워요. – WoIIe