2010-08-05 4 views
0

사용자가 페이지에서 둘 이상의 다시 게시 요소를 클릭하지 못하게하려고합니다. 즉, '계속'제출 버튼을 클릭하면 원래 요청이 다시 오기 전에 다른 다시 게시가 발생해서는 안됩니다.내 페이지의 모든 버튼과 링크를 비활성화 할 수 있지만 어떻게하면 다시 게시 할 수 있습니까?

jQuery 코드에는 두 가지 버전이 있습니다.

이 버전에서는 모든 포스트 백 요소를 사용할 수 없게되지만 클릭하면 해당 요소가 실행되지 않습니다. 기록을 위해, 나는 .removeAttr('onclick')이 정말로 필요하다고 생각하지 않지만 그것을 떠나는 것은 행동을 바꾸는 것처럼 보이지 않는다.

$(function() { 
    $('a, :button, :submit').click(function() { 
     var elements = $('a, :button, :submit'); 
     elements.attr('disabled', 'disabled').removeAttr('onclick'); 
    }); 
}); 

이 버전은 모든 다른 다시 게시 요소를 비활성화하지만 내가 클릭 한 같은 요소를 다시 사용할 수 있습니다 - 내가 두 번 같은 버튼을 누르면 할 수 싶지 않아요.

$(function() { 
    $('a, :button, :submit').click(function() { 
     var otherelements = $('a:not(#' + $(this).attr('id') + '), :button:not(#' + $(this).attr('id') + '), :submit:not(#' + $(this).attr('id') + ')'); 
     elements.attr('disabled', 'disabled').removeAttr('onclick'); 
    }); 
}); 

이 동작을 어떻게 막을 수 있습니까?

+0

두 번째 접근 방식에 혼란 스럽습니다 ... 일부 오타가 있습니까? – Reigel

+0

아니요, 오타가 없습니다. 모든 앵커, 버튼 및 트리거 버튼을 제외하고 버튼을 가져 오는 것은 (비효율적 인) 방법 일뿐입니다. – Damovisa

답변

0

다음은 작동하는 최종 버전입니다. 개별 요소를 살펴 보는 대신 양식 제출 이벤트를 무시하는 것입니다.

var submitted = false; 
$(function() { 
    $('form').bind('submit', function() { 
     if (!submitted) { 
      submitted = true; 
      return true; 
     } else { 
      return false; 
     } 
    }); 
}); 

귀하의 제안에 감사드립니다.

1

어쩌면 당신은 어떤 버튼을 클릭했는지 기억할 수있는 플래그를 넣을 수 있습니다. 플래그가 존재하면 그 포스트 백을 유발하는 요소에서 onclick 이벤트를 제거 할 수 있습니다. 그러나 일단 페이지가 제출되면 모든 클라이언트 측 요소와 스크립트가 새로 고쳐지기 때문에 이것이 클라이언트 측 스크립팅만으로는 수행 될 수 없다고 생각합니다.

+0

나는이 제안을 시도 해왔다. 그리고 지금까지 작동하고있는 것처럼 보인다 ... 나는 계속 당신을 게시 할 것이다. – Damovisa

0

아마도이 기능을 클릭 기능으로 만드는 대신 onmouseup으로 만들어야하므로 click 이벤트가 발생한 후에 실행됩니다.

+0

흥미 롭 ... 나는 그것을 시도 할 것이다. 유일한 문제는 엔터 키를 사용하여 제출을 트리거하는 것일 수 있습니다. – Damovisa

2

JQuery를 사용하지 않고 첫 번째 접근 방식을 테스트 한 결과 제대로 작동 했으므로 제출 버튼을 사용 중지해도 양식 제출이 방해되지 않았습니다.

<form method="get"> 
    <input type="text" name="textfield" value="a" /> 
    <input type="submit" onclick="this.disabled=true"> 
</form> 

어쩌면 다시 확인하고 싶습니다. JQuery, 계속 하시겠습니까?

+0

나는 약간 혼란 스러웠다. 문제는 위의 jQuery를 제거하면 모든 것이 작동하지만 (이중 포스트 백이 가능함) 비활성화 된 속성을 설정하면 서버 측에서 어떤 일이 발생하는지 궁금합니다. – Damovisa

+0

나는 그렇게 생각하지 않는다. 사용자가 실수로 이중 제출을하지 않도록하려면 원하는 z- 색인 및 위치 CSS 속성을 사용하여 전체 페이지에서 (반투명) 레이어를 간단하게 수행 할 수 있습니다. –

+0

내가 할 수있는 또 다른 일은 onsubmit 이벤트에서 요소를 비활성화하는 것입니다. –

관련 문제