Rails - вызывайте Ajax только после завершения визуального эффекта - PullRequest
1 голос
/ 18 июля 2011

Я хотел бы сделать вызов ajax только после того, как мой эффект FadeOut закончился.Вот мой простой код:

<script type="text/javascript">
function closeIt(id) {
    $(id).slideUp();        
}
</script>

<%= link_to_remote('Delete', :url => {:action => "ajaxdestroy", :controller => "blog_comments", :blog_post_id => @blog_post.id, :id => comment.id}, :before => "closeIt('comment#{comment.id}')", :update => "blogPostComments", :confirm => 'Are you sure?') %></p>

Прямо сейчас сгенерированный html выглядит так:

<a onclick="if (confirm('Are you sure?')) { closeIt('comment39'); new Ajax.Updater('blogPostComments', '/blog_comments/ajaxdestroy/39?blog_post_id=6', {asynchronous:true, evalScripts:true, parameters:'authenticity_token=' + encodeURIComponent('Xzvq2/0BlbVi3eVCxW5TGcKmap3nrVC1SiG76W+bVGc=')}); }; return false;" href="#">Delete</a>

Таким образом, вызывается функция closeIt эффекта, но вызов ajax завершается до эффекта slideUp.Как я могу вызвать функцию Ajax при обратном вызове предыдущей функции closeIt?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Использование

<a onclick="return closeThat(39);" href="#">Delete</a>



function closeThat(id) {
    if (confirm('Are you sure?')) {
        closeIt('comment'+id, function() {
            new Ajax.Updater('blogPostComments', '/blog_comments/ajaxdestroy/'+id+'?blog_post_id=6', {
                asynchronous: true,
                evalScripts: true,
                parameters: 'authenticity_token=' + encodeURIComponent('Xzvq2/0BlbVi3eVCxW5TGcKmap3nrVC1SiG76W+bVGc=')
            });
        });
    }
    return false;
}


function closeIt(id, callback) {
    $(id).slideUp(400, callback);        
}
1 голос
/ 19 июля 2011

Хорошо, я решил использовать javascript после того, как был создан. Я удалил символы: before и: verify из link_to_remote и добавил поле 'id' в сгенерированный элемент

 <%= link_to_remote 'Cancella', {:url => {:action => "ajaxdestroy", 
                                          :controller => "blog_comments", 
                                          :blog_post_id => @blog_post.id, 
                                          :id => comment.id},
                                 :update => "blogPostComments"},
                                 {:id => "delete#{comment.id}"} %></p>

     <script>   
         var onClick<%=comment.id%> = new Function($('#delete<%= comment.id%>').attr('onClick'));  //get the ajax call autogenerated        
         function nuova() {   //define a new function to wrap it
              if (confirm('Are you sure?')) { //move here the confirm message
                  $('#comment<%= comment.id%>').hide(600,onClick<%=comment.id%>);
              }
              return false;     
    }                                   
         $('#delete<%= comment.id%>').removeAttr('onclick').click(nuova);
    </script>

Не самый чистый, но это решение. Теперь вызов ajax Delete отправляется только после того, как эффект был прекращен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...