如何使用jquery在按钮之前添加<textarea>

时间:2015-12-08 16:16:46

标签: javascript jquery forms textarea

&lt; p&gt;我有一个简单的&#34;新闻文章列表&#34;我想提供评论。我创建了一个&#34;添加评论&#34; 。按钮&LT; / p为H. &lt; p&gt;我希望按钮创建&lt; code&gt;&lt; form&gt;&lt; / code&gt;使用&lt; code&gt;&lt; textarea&gt;&lt; / code&gt;紧接在单击按钮之前并且还创建一个&#34;取消&#34;单击按钮后立即按钮。 (我在提出这个问题时想出来了)&lt; / p&gt; &lt; p&gt;唯一剩下的就是我想要&#34;取消&#34;用于删除新创建的&lt; code&gt;&lt; textarea&gt;&lt; / code&gt;的按钮点击后自己。并且为了额外的信用,我如何防止&#34;添加评论&#34;制作多个空白按钮&#34; textareas&#34;?&lt; / p&gt; &lt; p&gt;&lt; div class =&#34; snippet&#34;数据琅=&#34; JS&#34;数据隐藏=&#34;假&#34;&GT;&#13; &lt; div class =&#34; snippet-code&#34;&gt;&#13; &lt; pre class =&#34; snippet-code-js lang-js prettyprint-override&#34;&gt;&lt; code&gt; $(document).ready(function(){&#13; $(&#34; .AddComment&#34;)。click(function(){&#13; $(&#34;&lt; form&gt;&lt; textarea name =&#39; ResearchUpdate&#39;占位符=&#39;在此输入您的评论&#39; rows =&#39; 3&#39; cols =&# 39; 40&#39; class =&#39;评论&#39;&gt;&lt; / textarea&gt;&lt; / form&gt;&#34;)。insertBefore(this);&#13; $(&#34;&lt; button class =&#39; CancelComment&#39;&gt;取消&lt; / button&gt;&#34;)。insertAfter(this);&#13; });&#13; &#13; $(&#34; .CancelComment&#34;)。click(function(){&#13; $(本).prev(&#34; .Commentary&#34)除去();&#13; $(这)一个.remove();&#13; });&#13; });&LT; /代码&GT;&LT; /预&GT;&#13; &lt; pre class =&#34; snippet-code-html lang-html prettyprint-override&#34;&gt;&lt; code&gt;&lt; script src =&#34; https://ajax.googleapis.com/ajax/库/ jquery的/ 2.1.1 / jquery.min.js&#34;&GT;&LT; /脚本&GT;&#13; &lt;!DOCTYPE html&gt;&#13; &LT; HTML&GT;&#13; &LT; HEAD&GT;&#13; &lt; title&gt;新闻条目&lt; / title&gt;&#13; &#13; &LT; /头&GT;&#13; &LT;身体GT;&#13; &#13; &lt; h2&gt;&lt; a href =&#34;#&#34;&gt; Killer Rabbit On The Loose&lt; / a&gt;&lt; / h2&gt;&#13; &lt; p&gt;日期:01/23/2015&lt; / p&gt;&#13; &lt; p&gt;作者:Bobert&lt; / p&gt;&#13; &lt; p&gt;主题:动物&lt; / p&gt;&#13; &lt; p&gt;最新评论:无。&lt; / p&gt;&#13; &lt; button class =&#34; AddComment&#34;&gt;添加评论&lt; / button&gt;&#13; &#13; &lt; h2&gt;&lt; a href =&#34;#&#34;&gt;保时捷推出Ultra Fast Minivan&lt; / a&gt;&lt; / h2&gt;&#13; &LT; p为H.日期:02 /二千零十五​​分之一十四&LT; / P&GT;&#13; &lt; p&gt;作者:Jimmy&lt; / p&gt;&#13; &lt; p&gt;主题:汽车&lt; / p&gt;&#13; &lt; p&gt;最新评论:&lt; / p&gt;&#13; &lt; p&gt;这是保时捷的天才!我可以在学校放下孩子,去买菜,还有时间和我的朋友一起去比赛。所有这一切都不用担心我的排放量不会被证伪并污染世界。 --SemiProRacer997&LT; / P&GT;&#13; &lt; button class =&#34; AddComment&#34;&gt;添加评论&lt; / button&gt;&#13; &#13; &#13; &LT; H2&GT; &lt; a href =&#34;#&#34;&gt; Apple发布iPhone Inifity&lt; / a&gt;&lt; / h2&gt;&#13; &LT; p为H.日期:03 /二千零十五​​分之十一&LT; / P&GT;&#13; &lt; p&gt;作者:Frank&lt; / p&gt;&#13; &lt; p&gt;主题:技术&lt; / p&gt;&#13; &lt; p&gt;最新评论:&lt; / p&gt;&#13; &#13; &lt; button class =&#34; AddComment&#34;&gt;添加评论&lt; / button&gt;&#13; &#13; &#13; &LT; /体&GT;&#13; &LT; / HTML&GT;&LT; /代码&GT;&LT; /预&GT;&#13; &LT; / DIV&GT;&#13; &LT; / DIV&GT;&#13; &LT; / p为H.

5 个答案:

答案 0 :(得分:0)

最好显示和隐藏现有项目,而不是动态创建并插入它们。

  

额外的功劳,因为没有添加评论超过一个textarea:

$(".AddComment").click(function () {
    $("<form><textarea name='ResearchUpdate' placeholder='Enter your comment here' rows='3' cols='40' class='Commentary'></textarea> </form>").insertBefore(this);
    $("<button class='CancelComment'>Cancel</button>").insertAfter(this);
    // Remove the click event and disable the button.
    $(this).off("click").prop("disabled", true);
});

我建议的解决方案:

请确保在每个帖子中添加一个类.comment-box和一个style="display: none;"的评论框,然后使用以下事件处理程序。

$(".AddComment").click(function () {
  $(this).prev(".comment-box").toggle();
});

此外,您可以让cancel按钮拥有以下事件处理程序:

$(".cancel").click(function () {
  $(this).closest(".AddComment").hide();
});

答案 1 :(得分:0)

最好的解决方案是使用css类将每个帖子项包装在一个容器div中,以后我们可以用它来进行jQuery选择。

<div class="postItem">
  <h2><a href="#">Killer Rabbit On The Loose</a></h2>
  <p>Date: 01/23/2015</p>
  <p>Author: Bobert</p>    
  <button class="AddComment">Add Comment</button>
</div>

<div class="postItem">
  <h2><a href="#">Second post</a></h2>
  <p>Date: 01/23/2015</p>
  <p>Author: Shyju</p>    
  <button class="AddComment">Add Comment</button>
</div>

在取消按钮点击事件中,获取容器div,找到表单和取消按钮并将其删除,

$(document).on("click",".CancelComment",function (e){

    var _this = $(this);
    _this.closest(".postItem").find("form").remove();
    _this.remove();       

});

工作样本here

您需要使用jQuery on方法绑定取消按钮上的click事件,因为它们是由代码动态创建并注入DOM的。

答案 2 :(得分:0)

我会在那里有表格,但隐藏它,以便当你点击按钮时它会出现。然后,您可以使用$('#buttonId').prop('disabled', true);

停用该按钮

这会阻止任何进一步的点击,尽管点击无论如何都无关紧要,因为您只有一个表单可以显示,因此它不会再弹出。

单击取消按钮应触发一个删除有问题的textarea内容的函数,隐藏表单/ textarea并重新启用注释按钮

show_comment:

function show_comment(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#formId').show();<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#cancelButton').show();<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#commentButton').prop('disabled', true)<br>
}

remove_comment:

function remove_comment(){<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#textareaId').html('');<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#commentButton').prop('disabled', false);<br>
&nbsp;&nbsp;&nbsp;&nbsp;$('#cancelButton').hide();

}

答案 3 :(得分:0)

<script type="text/javascript">
    $('.AddComment').one('click',function(e){
        e.preventDefault();
        var bt=$(this);
        var el=$('<textarea name="comment" />');
        el.insertBefore(this);
        bt.text('Send comment').on('click',function(e){
            if (el.val().length==0){
                alert("Please fill the comment before send.");
                el.focus(); //Delete this row if you don't want user to focus on the textarea.
                return false;
            }
            $.ajax({   
                type: 'POST',
                data : el,
                cache: false,  
                url: 'postUrl.php',
                success: function(data){
                    bt.after($('<b>Comment sent</b>').hide().fadeIn());
                    bt.add(el).hide();

                }   
            })
        })
    })
</script>

答案 4 :(得分:0)

代码中的问题。

  1. 您正在为页面加载时不存在的取消按钮添加点击功能。添加取消按钮后,您必须添加点击
  2. 你在取消按钮上做prev()是错误的。取消按钮的上一个兄弟是添加评论按钮而不是文本区域。
  3. 请查看以下代码是否解决了您的问题。 我也在添加注释文本区域后禁用添加按钮,这样就不会添加更多文本区域

    &#13;
    &#13;
    $(document).ready(function(){
    	$(".AddComment").click(function () {
                var $addCommentBtn = $(this), 
                    $commentTextArea;
                $addCommentBtn.prop( "disabled", true );
    	    $commentTextArea = $("<form><textarea name='ResearchUpdate' placeholder='Enter your comment here' rows='3' cols='40' class='Commentary'></textarea> </form>").insertBefore(this);
    	    $("<button class='CancelComment'>Cancel</button>").insertAfter(this).click(function (){
    		$commentTextArea.remove();
    		$(this).remove();
                    $addCommentBtn.prop( "disabled", false );
    	    });
    	});
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <!DOCTYPE html>
    <html>
    <head>
    <title>News Entries</title>
    
    </head>
    <body>
    
    <h2><a href="#">Killer Rabbit On The Loose</a></h2>
    <p>Date: 01/23/2015</p>
    <p>Author: Bobert</p>
    <p>Subject: Animals</p>
    <p>Most Recent Comment: None Yet.</p>
    <button class="AddComment">Add Comment</button>
    
    <h2><a href="#">Porsche Unveils Ultra Fast Minivan</a></h2>
    <p>Date:02/14/2015</p>
    <p>Author: Jimmy</p>
    <p>Subject: Cars</p>
    <p>Most Recent Comment:</p>
    <p>This is genius on Porsche's behalf! I can drop off the kids at school, go grocery shopping and still have time to go racing with my buddies. All without worrying that my emissions aren't falsified and polluting the world.  --SemiProRacer997</p>
    <button class="AddComment">Add Comment</button>
    
    
    <h2> <a href="#">Apple Releases iPhone Inifity</a></h2>
    <p>Date:03/11/2015</p>
    <p>Author: Frank</p>
    <p>Subject: Technology</p>
    <p>Most Recent Comment:</p>
    
    <button class="AddComment">Add Comment</button>
    
    
    </body>
    </html>
    &#13;
    &#13;
    &#13;