2017-09-04 2 views
1
//Create Account - Register Button 
$('#registerCreateAccount').on('click', function() { 
    var uid = $('#registerUsername').val(); 
    var email = $('#registerEmail').val(); 
    var age = $('#registerAge').val(); 
    var pwd = $('#registerPassword').val(); 
    var confirmPwd = $('#registerConfirmPassword').val(); 
    $.post('./php/register/createAccount.php', {uid: uid, email: email, age: age, pwd: pwd, confirmPwd: confirmPwd}, function(data) { 
     if (errTime) { 
      clearTimeout(errTime); 
     } 
     $('.errorMsg').html('<span class="w3-display-middle">' + data + '</span>'); 
     var errTime = setTimeout(function() { 
      $('.errorMsg').html(''); 
     }, 5000); 
    }); 
}); 

기본적으로 내가하는 일은 데이터를 PHP 파일로 보내고 콜백이있는 경우 오류 메시지입니다. 그래서 .errMsg div의 html을 변경합니다. 이전에는 보이지 않았지만, 내용이 없기 때문입니다. 오류 메시지가 5 초 동안 만 있기를 원하기 때문에 setTimeout을 사용하여 5 초 후에 내용을 지우기로 결정했습니다.clearTimeout이 제대로 작동하지 않습니다.

문제는 사람들이 등록 버튼을 여러 번 클릭 할 때 setTimeout이 계속 진행된다는 것입니다. 그렇기 때문에 버튼을 눌렀을 때 첫 번째 타임 아웃을 지우겠다고 결정했는데 어떤 이유로 그것이 작동하지 않습니다.

나는 거의 한 시간 동안 이것을보고 있었고 나는 버그를 찾지 못했지만, 나를 도와 주신 분들께 감사드립니다!

모두 여러분, 정말 빨리 도와 주셔서 감사합니다!

+0

상위 범위에서'errTime'을 정의해야합니다. –

+0

포스트 콜백에'errTime' 변수를 정의하십시오. 그래서 함수가 호출 될 때마다 새로운'errTime' 변수가 생성됩니다. click 이벤트가 발생하면 'errTime' 변수를 정의 해보십시오. 이 방법으로 모든 클릭 핸들러는 같은'errTime'에 접근 할 것입니다. – Bellian

답변

1

는 그냥 시간 제한 기능 의 범위에 알려진

var errTime; 
$('#registerCreateAccount').on('click', function() { 
    var uid = $('#registerUsername').val(); 
    var email = $('#registerEmail').val(); 
    var age = $('#registerAge').val(); 
    var pwd = $('#registerPassword').val(); 
    var confirmPwd = $('#registerConfirmPassword').val(); 
    $.post('./php/register/createAccount.php', {uid: uid, email: email, age: age, pwd: pwd, confirmPwd: confirmPwd}, function(data) { 

      clearTimeout(errTime); 

     $('.errorMsg').html('<span class="w3-display-middle">' + data + '</span>'); 
     errTime = setTimeout(function() { 
      $('.errorMsg').html(''); 
     }, 5000); 
    }); 
}); 
0

범위 지정 문제.

$.post에 대한 초기 호출보다 위에 var errTime;으로 이동하므로 각 호출에서 다시 정의되지 않습니다. errTime = setTimeout(....)은 그대로두고 var은 사용하지 않습니다. 변수의 코드 범위에서

+0

클릭 이벤트가 여러 번 호출되고 하나의 게시물 요청 만 트리거하므로'$ ('# registerCreateAccount'). on' 전에 정의하는 것이 더 좋습니다. – Bellian

+0

@Bellian, 그렇지 않으면 errTime을 더 세계적으로 사용할 수 있기를 원한다면. 이 버튼/기능을위한 것이라면 게시물 내에 범위를 유지하는 것이 좋습니다. – pbuck

0

var에 errTime 경악을 작동 한 후 전 세계적으로 사용할 수있는이 변수를 확인 후 콜백 함수 내에서 종료하거나 외부 errTime을 정의 세계적으로 또는 $ ('#의 registerCreateAccount').에 ('클릭'기능() {당신이 그렇게에 UID를 정의하고

기능 ... 내부

또 다른 방법은 윈도우를 사용하는 것입니다 [ 'errTime '] = ....

관련 문제