2011-08-19 5 views
1

설문 조사 유형 '양식'이 있습니다. 사용자가 변경 사항에 대해 투표 한 내용이 있지만 입력 내용은 동일하게 유지됩니다. 그들이 submit을 누르면, 다른 것들 중에서 사용자가 투표를하게되는 새로운 것이로드 될 것입니다. 낮은 주파수로 제출 버튼을 누르면 내 프로그램이 정상적으로 작동합니다. 그러나 너무 빨리 누르면 프로그램이 중단됩니다. 내 코드에서 특정 시간에 버튼을 활성화/비활성화하는 것으로 놀았으므로 그 이유는 혼란 스럽습니다.이전 버튼을 클릭 한 후 제출 버튼을 너무 빨리 클릭하면 내 jquery 보호가 중단됩니다.

다음
<button id='submit-vote' disabled='disabled'>Submit</button> 
<element class='change'><INPUT id='hidden_id' TYPE='hidden' name='id' value='<?php echo $id; ?>'/></element> 

스크립트 모르겠어요 (내 JQuery와 출신이 문제 경우,하지만이 모든 </body> 사이 </HTML> 태그로 작성, 그리고에 : 여기

내 HTML의 발췌 한 것입니다 <head></head> 태그 사이).

<script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     $("#submit-vote").attr("disabled", false).data('disabled', false); 
    }); 

    function loadListing() 
    { 
     var id = $('input:hidden[name=id]').val(); 
     $.get("controller.php",{/* [relevant values]*/}, 
     function(data) 
     { 
      if(data.response == 'success') 
      { 
       //some code 
       var newId = $("<INPUT id='hidden_id' TYPE='hidden' name='id' value='"+data.id+"'/>"); 
       $('#hidden_id').replaceWith(newId); 
       return true; 
      } 
      else 
      { 
       //some code 
       return false; 
      } 
     }, "json"); 
    } 
    jQuery(function($){ 
     $("#submit-vote").click( 
      function(){ 
       if($(this).data('disabled') !== false) 
       { 
        return; 
       } 
       else 
       { 
        $(this).attr('disabled', true).data('disabled', true); 
        $.post('controller.php', {/*[relevant values]*/} , 
        function(data) 
        { 
         if(data.response == 'success') 
         { 
          //code 
          loadListing(); 
          $('#submit-vote').attr('disabled', false).data('disabled',false); 
          return true; 
         } 
         else 
         { 
          //code 
          $('#submit-vote').attr('disabled', false).data('disabled',false) 
          return false; 
         } 
        }, "json"); 
       } 
      } 
     ); 
    }); 
    </script> 

편집 : (나는이 질문에 대한 첫번째 대답에서 코드를 포함하는 내 jQuery를 업데이트 한, 나는 또한 포함하여 한 에드 조금 더 내 HTML).

내 'controller.php'발췌입니다. 나는 중요한 것들을 포함하기 위해 많은 것들을 편집했다. 중요한 것은 제출 버튼 클릭이 매우 자주 클릭되지 않는 한이 모든 것이 일반적으로 완벽하게 작동한다는 것입니다. 예 :

if(!isset($_POST['poll']) && !isset($_GET['newListing'])) //UPON PAGE LOAD 
{ 
    $activities = Activity::newActivitiesArrays($user_id); 
    $_SESSION['activities'] = $activities; 
    //more relevant code 
    include('view.php'); 
} 
if(isset($_POST['poll']) && !isset($_GET['newListing'])) //submitting vote 
{ 
    //relevant code using posted values 
    $res = Activity::vote($user_id, $id, $vote); 
    if(!$res) 
    { 
     echo json_encode(array("response"=>"fail")); 
    } 
    else 
    { 
     echo json_encode(array("response"=>"success")); 
    } 
} 
if(isset($_GET['newListing']) && isset($_GET['id'])) //getting something different to display 
{ 
    $id = $_GET['id']; 
    $activities = $_SESSION['activities']; 
    list($acts, $links, $ids) = $activities; 
    $keys = array_keys($ids, $id); 
    $key=$keys[0]; 
    if(!$key) 
    { 
     echo json_encode(array("response"=>"failure")); 
    } 
    else 
    { 
     //relevant code 
     unset($_SESSION['activities']); 
     $_SESSION['activities'] = $activities; 
     echo json_encode(array("response"=>"success")); 
    } 
} 

도움이나 제안.

답변

2

속성이 disabled="disabled" 인 버튼은 여전히 ​​클릭 이벤트를 발생시킵니다. 스크립트가 스크립트를 사용할 수 없음을 알 수 있도록 변수를 지정해야합니다. 내가 data()

 $(function(){ 
      //The button should be enabled only as soon as the page is ready. 
      $("#submit-vote").attr("disabled", false).data("disabled", false); 

      $("#submit-vote").click( 
       function(){ 
        if($(this).data('disabled') !== false) 
        { 
         return; 
        } 
        else 
        { 
         $(this).attr('disabled', true).data('disabled',true); //disable the button 

         $.post('controller.php', {/* [RELAVANT VALUES] */ } , 
         function(data) 
         { 
          if(data.response == 'success') 
          { 
           //some code 
           $('#submit-vote').attr('disabled', false).data('disabled',false); //enable button 
           return true; 
          } 
          else 
          { 
           //some code 
           $('#submit-vote').attr('disabled', false).data('disabled',false); //enable button 
           return false; 
          } 
         }, "json"); 
        } 
       } 
      ); 
     }); 

문서 도구를 사용하는 것이 좋습니다 : 기본적으로 http://api.jquery.com/data/

+0

를 상호 배제를 달성 있습니다 ABT 더 deatails이 게시물을 읽어 보시기 바랍니다 당신이'prop()'를 사용할 수 있어야하고 bool을 반환 할 것이기 때문에'prop()'를 사용할 수 있어야한다. if ($ (this) .prop ("disabled")) {return;}' 'data()' – Maverick

+0

@AlienWebguy, 당신의 충고를 받아 코드 추가를 시도했습니다. 이제는 훌륭하게 작동합니다. 그러나 고주파수에서이를 테스트했을 때 연속적인 클릭이 매우 가까워지면 여전히 실패 할 수있었습니다. 왜 그런지에 대한 아이디어가 있습니까? 감사! – Marina

+0

예제 페이지가 있습니까? – AlienWebguy

관련 문제