Javascript JQuery无法识别选择器中发生了什么
当Javascript JQuery无法识别选择器中发生了什么,javascript,jquery,ruby-on-rails,ajax,coffeescript,Javascript,Jquery,Ruby On Rails,Ajax,Coffeescript,当.comment表单和.reply表单divs中发生某些事情时,应该会运行此命令。但是,代码仅在.comment表单中发生事件时运行 加载页面时,.comment表单div将显示,但只有在单击“回复”按钮时,.reply表单div才会显示。我认为这可能是问题所在,.reply表单不在页面加载中,因此当它实际出现时,JQuery无法识别它在那里。如何解决此问题?用于向尚未出现的元素添加事件 jQuery -> $(".comment-form, .reply-form") .o
.comment表单
和.reply表单
divs中发生某些事情时,应该会运行此命令。但是,代码仅在.comment表单
中发生事件时运行
加载页面时,.comment表单
div将显示,但只有在单击“回复”按钮时,.reply表单
div才会显示。我认为这可能是问题所在,.reply表单
不在页面加载中,因此当它实际出现时,JQuery无法识别它在那里。如何解决此问题?用于向尚未出现的元素添加事件
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')
用于向尚未出现的元素添加事件
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')
事件将是ajax:beforeSend和ajax:success
选择器应为.comment表单、.reply表单
数据将是(evt、xhr、设置)和(evt、数据、状态、xhr)
请让我知道如果你的代码被改写为上述格式是否有效
我没有注意到上面的帖子中有MinusFour的评论
事件将是ajax:beforeSend和ajax:success
选择器应为.comment表单、.reply表单
数据将是(evt、xhr、设置)和(evt、数据、状态、xhr)
请让我知道如果你的代码被改写为上述格式是否有效
我没有注意到MinusFour在上面的帖子中发表了评论。下面是如何处理动态元素的侦听器(例如,在就绪事件之后)
//使用委托
$('delegationparent')。在('click','div',function()上{
$('#results').html('委托部门');
});
//插入新div(以前不存在)
$('delegationdiv')。附加到('delegationparent');
//没有代表
//创建Div
var div=$('No Delegate div');
//将处理程序附加到div
div.on('单击',函数()){
$('#results').html('无委托div');
});
//插入Div
副词appendTo(“#nodelegate”)代码>
以下是如何处理动态元素的侦听器(例如,在就绪事件之后)
//使用委托
$('delegationparent')。在('click','div',function()上{
$('#results').html('委托部门');
});
//插入新div(以前不存在)
$('delegationdiv')。附加到('delegationparent');
//没有代表
//创建Div
var div=$('No Delegate div');
//将处理程序附加到div
div.on('单击',函数()){
$('#results').html('无委托div');
});
//插入Div
副词appendTo(“#nodelegate”)代码>
如何将回复表单
加载到页面中?每个评论都有一个名为“回复”的链接。单击“Reply”后,将使用带有div.Reply form的AJAX将表单加载到页面中。Reply form“只要在创建元素后附加侦听器即可。我假设您是通过DOM插入表单的。你所要做的就是抓取你创建的对象,然后添加处理程序。Nvm我得到了,谢谢!如何将.reply form
加载到页面中?每个评论都有一个名为“reply”的链接。单击“Reply”后,将使用带有div.Reply form的AJAX将表单加载到页面中。Reply form“只要在创建元素后附加侦听器即可。我假设您是通过DOM插入表单的。你所要做的就是抓取你创建的对象,然后添加处理程序。Nvm我得到了,谢谢!在文档中,它说在jQuery 1.7+中,.on()自动使用delegationIt基本上是一样的$(parentElement).on('ajax:success','.comment form,.reply form',handler)
不确定我认为是问题的东西现在是否真的是问题。因为由于.on()自动执行委托,可能是其他方面出了问题。我不知道这会怎样?如果元素不存在,jQuery对象应该返回一个包含0项的集合来附加处理程序,因此不会发生任何事情。请给出一个示例。只有链接的答案是不好的形式,因为链接可能会过时。在文档中,它在jQuery 1.7+中说,.on()自动使用delegations,但基本上是一样的$(parentElement).on('ajax:success','.comment form,.reply form',handler)
不确定我认为是问题的东西现在是否真的是问题。因为由于.on()自动执行委托,可能是其他方面出了问题。我不知道这会怎样?如果元素不存在,jQuery对象应该返回一个包含0项的集合来附加处理程序,因此不会发生任何事情。请给出一个示例。只有链接的答案是不好的形式,因为链接可能会过时。谢谢!这加上四个字真的很有帮助。谢谢!这加上四个小错误真的很有帮助。
$(document).on( events , selector , data )