gpt4 book ai didi

jquery - Rails 3 jQuery 识别 "this"对象

转载 作者:行者123 更新时间:2023-12-01 06:30:06 27 4
gpt4 key购买 nike

我的设置:Rails 3.0.9、Ruby 1.9.2、jQuery 1.6.2

HTML

<textarea id="photo-42-9" class="comment_box">Write a comment...</textarea>

jQuery

$('#newsfeed').delegate('.comment_box', 'keydown', function (event){
if(event.keyCode == 13) {
event.preventDefault();
$.post('/comments', { title: ..., description: ... });
}
});

rails

comments_controller.rb    
def create
@comment = Comment.new

respond_to do |format|
format.html # new.html.erb
format.js
end
end

create.js.erb
$("<%= escape_javascript( render 'show_comments') %>").insertBefore(???);

render 'show_comments'返回 <div>stuff</div>我希望在 textarea 之前插入。我可以在 #photo-42-9 上使用选择器但该 id 是动态的,具体取决于哪个 textarea我点击的元素。如何访问this create.js.erb 中的对象?

最佳答案

在js中:

$('#newsfeed').delegate('.comment_box', 'keydown', function (event){
if(event.keyCode == 13) {
event.preventDefault();
var params = { title: ..., description: ... };
var $this = $(event.target);
$.post('/comments', params, function(response) {
$this.before(response);
});
}
});

在 ruby​​ 中(我猜,我不做 ruby​​):

"<%= escape_javascript( render 'show_comments') %>"

如您所见,“this”没有传递给 rb。相反,$.post 函数等待 rb 响应,并将其粘贴到文本区域(事件目标)之前。这种方式更好,因为你的所有 js 代码实际上都在你的 js 代码中。

注意:“$(response).insertBefore($this)”的工作原理相同。

注意:如果将 $this 分配移出“if”,您可以轻松检查新注释是否不为空且与已存在的注释不同 (event.keyCode == 13 && $this .val() != '' && $this.val() != $this.prev().text())。此外,您可以在插入“$this.before”之后立即使用 $this.val('') 清空文本区域。

关于jquery - Rails 3 jQuery 识别 "this"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com