如何在rails中实现像stackoverflow's ' add a comment '这样的功能'应
How to implement a function like stackoverflow's `add a comment` in Rails' app?
我正试图用Rails实现一个迷你SO,并在每个问题和答案下找到SO的add a comment
,对我来说非常有趣和困难:
单击add a comment
链接后,add a comment
链接将隐藏,并显示textarea
和submit
的表单。
一开始,对于活动编号为47的问题,我使用如下代码片段来实现:
<div id="comments" class="comments">
<button type="button" id="comment-btn-47">add a comment</button>
<div id="new-comment-47" style="display:none">
...
</div>
</div>
和点击add a comment
时使用代码:
<% content_for :javascript do%>
$("#comment-btn-47").click(function(){
$("#new-comment-47").show(0, function(){
$("#comment-btn-47").hide() });
<% end %>
NOTE:here `47` is the answer activity No
在编写注释的内容并单击名为submit
的按钮之后,保存和显示注释的最后一部分包括以下代码:
$("#new-comment-47").hide();
$("#comment-btn-47").show();
当一个问题没有答案时,它工作得很好,但当一个问题有一个或多个答案时,上述解决方案就失败了。经过简单的思考,我发现<% content_for :javascript do %> ... <% end %>
需要一个更复杂的解析,例如,如果有一个问题的编号是47,对应的答案是74,那么在<% content_for :javascript do %> ... <% end %>
中,我需要:
<% content_for :javascript do%>
$("#comment-btn-47").click(function(){
$("#new-comment-47").show(0, function(){
$("#comment-btn-47").hide() });
$("#comment-btn-74").click(function(){
$("#new-comment-74").show(0, function(){
$("#comment-btn-74").hide() });
<% end %>
显然,这不是一个解决方案,我该怎么办?关于javascript
, rails
或css
,我错过了什么?提前感谢!
您的大多数困难是由于您滥用元素ID的事实。ID对于真正独特的元素来说是很好的,但仅仅使用ID会使编写良好的可重用代码或将javascript移出视图变得极其困难,因为它本来就没有位置。
$('.answer, .question').on('click', '.add-a-comment', function(){
var $button = $(this);
$button.hide(); // hide the button
// go up to the parent question
// and the look down to find form.
$button.parents('.answer, .question')
.find('.comment-form').removeClass('hidden');
});
// Silly example of adding an event handler and traversing
$('.answer, .question').on('submit', '.comment-form', function(){
var $form = $(this);
var $comments = $form.parents('.answer, .question')
.find('.comments');
$comments.append('<li>' + $form.find('textarea').val() + '</li>');
});
.hidden { display: none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="question">
<!-- ... -->
<section class="comments-box">
<p>Blablabla...?</p>
<ul class="comments">
<li class="comment">Say what?</li>
<!-- ... -->
</ul>
<p>
<button type="button" class="add-a-comment">add a comment</button>
</p>
<form class="comment-form hidden">
<input type="hidden" name="comment[question_id]" value="3">
<textarea name="comment[body]"></textarea>
<input type="submit" value="submit comment">
</form>
</section>
</div>
<div class="answerswer">
<!-- ... -->
<section class="comments-box">
<p>Just add water</p>
<ul class="comments">
<li class="comment">This is silly.</li>
<!-- ... -->
</ul>
<p><button type="button" class="add-a-comment">add a comment</button></p>
<form class="comment-form hidden">
<input type="hidden" name="comment[answer_id]" value="5">
<textarea name="comment[body]"></textarea>
<input type="submit" value="submit comment">
</form>
</section>
</div>
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- 如何在rails中实现像stackoverflow's ' add a comment '这样的功能'应