0

私は MVC 3 アプリケーションを開発しており、かみそりの構文を使用しています。

このアプリケーションでは、コメント機能を提供しています。

すべての Div にコメント リンクを追加しました。. ユーザーがそのコメント リンクをクリックすると、コメントを追加するためのコントロールのグループを含む部分ビューが読み込まれます。

リストを使用してレコードを表示しています。ユーザーがコメント ボタンをクリックすると、部分ビューを使用してコメント コントロールが読み込まれます。

問題は、最初のレコードにのみコメントを追加できることです。他のレコードにコメントを追加することはできません...

何の問題?

下の画像を確認してください...

ここに画像の説明を入力

これは、DBにコメントを追加し、最新のコメントをビューに戻して表示する部分ビューのコードです。

<script src="../../Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.8.0.min.js" type="text/javascript"></script>

<script src="../../Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>


 <script src="../../Scripts/jquery.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function () {
        $('#AddCommentButton').click(function () 

        {
        var comment1 = $('#Comment').val();
        if (comment1 == '') {
            alert('Please enter a comment');
            return;
        }


            $.ajax({

                type: 'post',
                url: '/Comment/SaveComments',
                dataType: 'json',


                data:
                { 

                 'comments' : $('#Comment').val(), 
                 'EType' : @Html.Raw(Json.Encode(ViewBag.EType)), 
                  'EId' : @Html.Raw(Json.Encode(ViewBag.EId))

                },
                success: function (data) {


                                   $("p.p12").append('<button type="button" id=' + data.Id  + ' class="deleteComment2">Delete</button></div>')



                }

            });
        });
    });
</script>

削除ボタンをクリックしたときに、以下のコードを使用します...

<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">

    $('.deleteComment').live('click', function () {
        alert('Clicked');
    });

</script>

さて、問題の要約は、divを追加し、そのdivにボタンを追加し、そのボタンのクリックイベントを取得しようとしていますが、そのイベントを取得できません。

ボタンがDivタグにランタイムを追加されたときに、ボタンのクリックイベントを処理するための簡単なコードを誰でも教えてください。

Darin Dimitrov の更新コードは次のとおりです。

@model  IEnumerable<CRMEntities.Comment>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>


 <!DOCTYPE html>


<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">

   $(document).on('click', '.deleteComment', function() 
   {
    alert('comment deleted');    
});


$(document).ready(function () {
alert("Doc loaded");

});
​

</script>




<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function () {
        $('#AddCommentButton').click(function () {

            $('#comments22').append('<input type="button" class="deleteComment" value="Delete" /><br/>');
            $('#comments22').append('<input type="button" class="deleteComment" value="Delete" /><br/>');
            $('#comments22').append('<input type="button" class="deleteComment" value="Delete" /><br/>');
            $('#comments22').append('<input type="button" class="deleteComment" value="Delete" /><br/>');
        });
    });
</script>




<script src="../../Scripts/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $(".ShowComments").click(function () {
            $(".ParentBlock").slideToggle("slow");

        });
    });
</script>



</head>
<body>

@{





     <div class="ParentBlock">



    @foreach (var item in Model)
    {
        <div class="OwnerClass" id="OwnerName">


         <span class="EmpName"> @Html.ActionLink(item.Owner.FullName, "Details", "EMployee", new { id = item.OwnerId }, new { @style = "color:#1A6690;" })</span>

           @Html.DisplayFor(ModelItem => item.CommentDateTime)

          <span class="EmpName"><button type="button" id = "@item.Id" class="deleteComment">Delete</button></span>



          <span class="EmpName"> @Html.ActionLink("Delete", "Delete", "Comment", new { id = item.Id }, new { @style = "color:#1A6690;" })</span>


        <p class="CommentP">
           @Html.DisplayFor(ModelItem => item.CommentText)
        </p>

        <br />
            <a class="Delete222" style="cursor:move;display:none;">DeleteNew</a>
        <br />

        </div>


    }


     <p class="p12">

      </p>



</div>

      <p id="ClassPara" class="ShowComments" onclick="chkToggle()">Show All Comments</p>

}



   @Html.TextArea("Comment", "", 5, 80, "asdsd")


    <input type="button" value="Add Comment" id="AddCommentButton"/>                         
    <input type="button" value="Clear" onclick="clearText()"/>                    

    <br />

    <div id="comments22">
    <input type="button" class="deleteComment" value="Delete" /><br/>
    <input type="button" class="deleteComment" value="Delete" /><br/>    
    <input type="button" class="deleteComment" value="Delete" /><br/>


</div>




</body>
</html>
4

2 に答える 2

1

のクリック イベントを購読しました #AddCommentButton。しかし、ID は DOM 全体で一意でなければなりません。を持つことができる要素は 1 つだけid="AddCommentButton"です。Add Commentしたがって、ボタンにはクラス セレクターを使用する必要があります。

$('.addComment').click(...);

そしてあなたのボタン:

<input type="button" value="Add Comment" class="addComment" />

また、この回答に注意していただければ幸いです。ヘルパーを使用する代わりに、ビューで URL をハードコーディングしているように見えます。

于 2012-09-25T05:25:14.510 に答える
1

こんにちは、以下のような削除イベントを取得できます

 $(".lnkDelete").click(function (e) {
            e.preventDefault();
            var targeturl = $(this).attr("href");

 and you can pass that targert url to your delete button like this 

window.location.href = targeturl;

私はこれがあなたを助けると思う....

于 2012-09-25T06:30:06.520 に答える