설문 조사 유형 '양식'이 있습니다. 사용자가 변경 사항에 대해 투표 한 내용이 있지만 입력 내용은 동일하게 유지됩니다. 그들이 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>
태그로 작성, 그리고에 : 여기
<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"));
}
}
도움이나 제안.
를 상호 배제를 달성 있습니다 ABT 더 deatails이 게시물을 읽어 보시기 바랍니다 당신이'prop()'를 사용할 수 있어야하고 bool을 반환 할 것이기 때문에'prop()'를 사용할 수 있어야한다. if ($ (this) .prop ("disabled")) {return;}' 'data()' – Maverick
@AlienWebguy, 당신의 충고를 받아 코드 추가를 시도했습니다. 이제는 훌륭하게 작동합니다. 그러나 고주파수에서이를 테스트했을 때 연속적인 클릭이 매우 가까워지면 여전히 실패 할 수있었습니다. 왜 그런지에 대한 아이디어가 있습니까? 감사! – Marina
예제 페이지가 있습니까? – AlienWebguy