JQuery .on AJAX事件多次被触发

时间:2015-08-15 21:09:59

标签: javascript jquery ruby-on-rails ajax

我目前正在开发一个Rails应用程序,在单击一个表单时会触发一个AJAX请求。请求只成功发送一次,但是下面的JQuery事件被触发了看似任意的次数(从1到15)。基本上,有一个AJAX请求,记录了许多AJAX事件。这导致返回的注释多次插入。

$(document).ready(function() {
    jQuery(function () {
        //target comment-form from comment form partial
        $(document)
            .on("ajax:beforeSend", '.comment-form-div', function (evt, xhr, settings) {
                console.log("Ajax request sent")
                return $(this).find('text_area')
                    .addClass('uneditable-input')
                    .attr('disabled', 'disabled');
            })
            .on("ajax:success", '.comment-form-div', function (evt, data, status, xhr) {
                console.log("Ajax request successful")

                $(this).find('text_area')
                    .removeClass('uneditable-input')
                    .removeAttr('disabled', 'disabled')
                    .val('');
                $(this).hide('slow')
                return $(xhr.responseText).hide().insertAfter($(this)).show('slow');
            });
    });
});

供参考,这是html中的Rails表单:

<div class="comment-form-div" id='master-comment-form'>
    <%= form_for(comment, remote: true) do |f| %>
      <div class="field">
        <%= f.text_area :body, :placeholder => "Add a comment" %>
        <%= f.hidden_field :commentable_id, value: comment.commentable_id %>
        <%= f.hidden_field :commentable_type, value: comment.commentable_type %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
</div>

1 个答案:

答案 0 :(得分:0)

你不应该劫持ajax:beforeSend既不是ajax:成功,只是将你的业务逻辑(javascript)放入update.js.erb

你可以写一些“console.log('ajax:success fired!')”,如果你想检查它什么时候被解雇了。