javascript - JQuery 无法识别选择器中发生的事情

标签 javascript jquery ruby-on-rails ajax coffeescript

jQuery ->
  $(".comment-form, .reply-form")
    .on "ajax:beforeSend", (evt, xhr, settings) ->
      debugger;
      $(this).find('textarea')
        .addClass('uneditable-input')
        .attr('disabled', 'disabled');
    .on "ajax:success", (evt, data, status, xhr) ->
      debugger;
      $(this).find('textarea')
        .removeClass('uneditable-input')
        .removeAttr('disabled', 'disabled')
        .val('');
      debugger;
      $(data.comments).hide().insertAfter($(this)).show('fast')

这应该在 .comment-form.reply-form div 中发生某些事情时运行。但是,代码仅在 .comment-form 中发生某些事情时运行。

.comment-form div 在页面加载时显示,但 .reply-form div 仅在单击“回复”按钮时出现。我认为这可能是问题所在 - .reply-form 在页面加载时不存在,因此当它实际出现时,JQuery 无法识别它的存在。我将如何解决这个问题?

最佳答案

这是处理动态元素监听器的方式(例如,在就绪事件之后)。

//Use delegation
$('#delegationparent').on('click', 'div', function(){
  $('#results').html('Delegated div.');
  });
//Insert new div (didn't exist before)
$('<div>Delegate Div</div>').appendTo('#delegationparent');

//No delegate
//Create Div
var div = $('<div>No Delegate Div</div>');
//Attach handler to div
div.on('click', function(){
  $('#results').html('No delegated div');
  });
//Insert Div
div.appendTo('#nodelegate');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="delegationparent"></div>
<div id="nodelegate"></div>
<pre id="results"></div>

关于javascript - JQuery 无法识别选择器中发生的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32152200/

相关文章:

ruby-on-rails - 使用带突出显示的正则表达式

javascript - AJAX不会提交数据

javascript - JQuery onpaste 事件限制用户粘贴字符,如 | , ./

javascript - 无法在网页上显示的 HTML 段落上叠加图像图标

jquery - 悬停时自动暂停或播放 HTML5 视频

ruby-on-rails - Ruby JSON.pretty_generate ... 很不漂亮

ruby-on-rails - 为什么 Rails 表单助手看起来像一个 do 循环?

javascript - 在阿拉伯字符串上使用替换时的奇怪行为

javascript - 从字符串 : Javascript 中提取关键字

javascript - jquery访问没有类名的表单