2014-09-09 17 views
0

AJAX 폴링 시스템 인 WordPress 용 플러그인 WP-Polls을 사용하고 있고 처음에 숨겨진 div (.comment-block)를 새 div에 추가하려고합니다. .voted)은 AJAX 성공시 WP-Polls 플러그인에 의해 DOM에 동적으로 삽입됩니다. 사용자가 투표 버튼 (.Buttons)을 선택하고 클릭하면 DOM은 .voted 클래스의 새 (빈) div 추가를 반영하여 업데이트됩니다. 이전에 비슷한 질문을했지만 더 관련성 높은 새로운 스레드를 열어 보겠다고 생각했습니다.jQuery를 사용하여 AJAX 성공 후 동적으로 생성 된 div에 추가

참고 : .voted 사업부는 템플릿을 통해 만들어진이 대시 보드에서 WP-설문 조사 제공. 플러그인은 " 전에 사용자가 투표했습니다"및 "사용자가 투표를 한 후에"템플릿을 제공하고 <div class="voted"></div>과 같이 후자에 div를 삽입했습니다. div에 내용을 직접 추가 할 수없는 이유는 div에있는 내용 (.comment-block)이 플러그인 문의 양식 7에 의해 작성된 연락처 양식이고 PHP 문이 필요하기 때문입니다. 템플리트에는 HTML 만 사용할 수 있습니다.

.on을 사용하려고 시도했지만 .Buttons을 클릭하면이 기능이 활성화됩니다. 그러나 DOM에서는 아무 것도 변경되지 않았습니다.

$(document).on('click', '.Buttons', function() { 
    $('.comment-block').appendTo('.voted'); 
}); 

아래는 HTML입니다. 이것은 사용자가 투표하기 전에이다 :

<div id="poll"> 
    (poll here) + .Buttons vote button     <-- in here----------| 
</div>                  | 
<div class="comment-block" style="display:none">  <-- I want this div | 
    <?php echo do_shortcode('[contact-form-7]'); ?> 
</div> 

그리고 이것은 사용자가 투표 후 나는 그것을보고하는 방법이다 : 사람이 나에게 길을 보여줄 수 있다면

<div id="poll"> 
    <div class="voted">         <-- dynamically created div 
     <div class="comment-block" style="display:block"> 
      <?php echo do_shortcode('[contact-form-7]'); ?> 
     </div> 
    </div> 
</div>            

, 나는 그것을 감사하겠습니다 . 나는 이걸로 몇 시간 동안 내 머리를 짚고있다.

편집 : https://github.com/lesterchan/wp-polls

+0

당신의 상황) 응답. 아마 당신은 이미 AJAX에 대한 탁월한 이해력을 가지고있을 것입니다. 그러나 재충전자가 도움이된다면 (여기에 몇 가지 예가 있습니다) (http://stackoverflow.com/questions/17973386/ajax-request-callback-using-jquery/17974843#17974843) – gibberish

+0

@gibberish 알다시피, 나는 그것을 포함하는 것이 좋은 생각이라고 생각했지만 어떤 파일을 보여줄지 확신하지 못했습니다. 나는 실제로 AJAX를 잘 이해하지 못합니다. 하지만 파일 목록을 살펴 보겠습니다. https://github.com/lesterchan/wp-polls – J82

답변

0
$('button.Buttons').click(function() 
{ 
    $('#poll').empty().append('<div class="voted"></div>'); 
    $('.comment-block').show().appendTo('.voted'); 
    $(this).unbind('click'); 
}); 

당신은 할 수 있습니다 그래서 내가 정확히 필요한 코드를 제공 할 수없는 해요,하지만 여기에 플러그인에 대한 파일의 목록입니다 AJAX와 속도를 최대 아니다 또한 '.show()'를 변경하여 실제 스타일을 표시하도록 설정하십시오. 필요한 경우 차단하십시오.

+0

이 줄의 목적을 설명해 주시겠습니까 :'$ ('poll'). empty() .append ('

');'사용자가 투표를하면 플러그인에 의해'.voted' div가 이미 동적으로 삽입됩니다. 나는 그 라인이 무엇인지를 이해하려고 노력하고 있습니다. – J82

+1

@ J82'.empty()'는'# poll' div의 모든 것을 삭제합니다. '.append()'는 새로 비운'# poll' div의 마지막에 * .voted DIV *를 추가합니다. div가 비어 있기 때문에'append()'또는'prepend()'또는'.html()'을 사용할 수 있습니다. – gibberish

0

내가 제대로 질문을 이해한다면,이 작업을해야합니다 :

$('.Buttons').on('click', function() { 
    setTimeout(function() { 
    var commentBlock = $('.comment-block'), 
     cloneComment = commentBlock.clone(); 
     commentBlock.remove(); 
    $('#poll').append(cloneComment); 
    cloneComment.wrap('<div class="voted">').show(); 
    }, 1000); 
}); 

첫째,이 '.Buttons'요소에 '클릭'결합한다. 그런 다음 '.comment-block'요소의 복제본을 만들어 원래 '.comment-block'을 .remove()하고 복제 된 요소를 .pend() 또는 .prepend()하여 '#poll'요소에 복사하십시오. 마지막으로 복제본을 <div class="voted">으로 .wrap()하고 .show()를 호출하여 복제본을 표시합니다.

+0

이 논리를 볼 수는 있지만 어떤 이유로'.Buttons'를 클릭하면 '.comment-block' div가 사라집니다. 나는 DOM을 감싸서 그것이 '# poll'으로 감싸지고 추가되었는지 알았지 만 발견 될 곳이 없다. 또한'.voted' div는 이미 플러그인에 의해 동적으로 삽입되었으므로이를 감쌀 필요가 있습니까? 아니면 대시 보드의 설문 조사 템플릿에서 해당 div를 가져올 수 있습니다. – J82

+0

'.Buttons'을 클릭하면'.comment-block'이 잠시 나타나고, 나머지 투표 폼과 함께 사라집니다. 그래서 나는'.comment-block' div가 AJAX 액션 전에 너무 일찍 추가되어 사용자가 투표를 한 후에 추가해야한다고 가정합니다. 그냥 새로운 정보가 어떤 식 으로든 도움이 될 경우를 대비하여 알려주는 것입니다. – J82

+0

@ J82는 플러그인이 참조하려는 DOM 요소 (#poll, .voted 등)를 조작하는 것처럼 들립니다. 추적 할 수있는 몇 가지 옵션 : 플러그인에 설명서가있는 경우 정의 된 콜백이 있는지 확인하십시오. 또는 정적 DOM 요소를 조작하는 방법을 찾아야 할 수도 있습니다 ... – Brett

0

당신은 아약스 호출에서 이벤트를 트리거해야합니다

버튼이 기능은 AJAX 호출을 발사 온 클릭. ajax success는 변경 대상 요소에서 이벤트를 발생시키고 해당 응답을 매개 변수로 전달합니다.

예 : HTML

<div id="foo">bar</div> 
<button onclick="ajaxCall();" /> 

자바 스크립트 당신은 더 "정밀 유도"(즉,이,에 맞게 조정하려는 경우 Ajax 코드를 표시해야 할거야

var ajaxCall = function() { 
    $.ajax({ 
    success: function(response) { 
     $("#foo").trigger("ajsuccess", response); 
    } 
    }); 
}; 
$("#foo").on({ 
    "ajsuccess" : function(e, response) { 
    $(this).append(response); 
    } 
}); 
관련 문제