0

私はそれを再構築することによってこの質問をもう一度出しています....私はまだ解決策を持っていないので...

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

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

コメントを追加する機能を提供し、DB に保存しました。

ユーザーが削除ボタンをクリックすると、メッセージが「クリックされました」と表示されます。

ユーザーがエンティティを読み込むと、以前に追加されたコメントが削除ボタンのあるページに表示され、ユーザーがそのボタンをクリックすると、「クリックされた」というメッセージが表示されます。

ここに画像の説明を入力

現在、ユーザーが新しいコメントを追加すると、DB に正常に保存され、[削除] ボタンとともにページにも表示されます。

ユーザーが削除ボタンをクリックすると、メッセージが表示されなくなります...(DBから新しいコメントをロードするときにDivタグを追加します)

追加に関して問題があると思います。つまり、以前のコメントの削除ボタンはうまく機能しますが、追加を使用してボタンを追加すると機能しません...

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

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

これが新しいコードです。ページにコードを追加しましたが、まだ機能していません。

<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>

@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

4 に答える 4

1

ページに jQuery を何回含める予定ですか? 1で十分なはずです。あなたはそれを3つの異なる場所に含めたようです。<html>また、要素が完全に間違っている場合、スクリプトを外部に配置したようです。

含める必要があるのは 1 つだけです。

<script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>

また、この.on()メソッドを使用して、削除ボタンのクリック イベントを活発にサブスクライブする必要があります。

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

最後になりましたが、要素でrunat="server"属性を使用しているようです。<head>それは Razor であり、WebForms ではありません。これらの属性は忘れてください。

このコードは完全に混乱しているため、このコードをクリーンアップさせてください。

@model IEnumerable<CRMEntities.Comment>
@{ 
    Layout = null;
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </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>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
    <!-- or use your own jQuery version locally: -->
    @*<script type="text/javascript" src="@Url.Content("~/scripts/jquery-1.8.1.js")"></script>*@
    <script type="text/javascript">
        $(document).on('click', '.deleteComment', function () {
            alert('comment deleted');
        });

        $('.ShowComments').click(function () {
            $('.ParentBlock').slideToggle('slow');
        });

        $('#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>
</body>
</html>
于 2012-09-25T07:01:30.250 に答える
0

ドキュメントの準備完了イベントにイベントを追加しています..しかし、イベントを添付するための要素は利用できません。

要素が作成された後にイベントを追加することを確認する必要があります...それを成功コールバック関数に追加します..

そうしないと、作成された要素はイベント ハンドラに関連付けられません...

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

   // Add the event to the Delete button when created...
    $('#' + data.Id).on('click', function() {
        alert('Clicked');
    });
}​
于 2012-09-25T07:02:51.747 に答える
0

1.7 以降の jQuery バージョンを使用している場合は、.on() を使用する必要があります。

$('body').on('.deleteComment', 'click', function () {
    alert('Clicked');
});
于 2012-09-24T13:11:30.597 に答える