1

mvc3 削除アクションに jquery onclick 確認ダイアログを実装しようとしています。言及する価値があるのは、私が成功したということです。私が苦労しているレンダリングダイアログ自体は、続行ボタンがクリックされた後のjsからの/ User / Deleteアクションへのプロセスアクションです。コードは次のとおりです。

onclick-delete.js

$(function () {
    var deleteLinkObj;
    // delete Link
    $('.delete').click(function () {
        deleteLinkObj = $(this);  //for future use
        $('#delete-dialog').dialog('open');
        return false; // prevents the default behaviour
    });

    //definition of the delete dialog.
    $('#delete-dialog').dialog({
        autoOpen: false, width: 400, resizable: false, modal: true, //Dialog options
        buttons: {
            "Continue": function () {
                $.post(deleteLinkObj[0].href, function (data) {  //Post to action
                    // THIS IS WHERE I SHOULD SEND DATA TO MY DELETE ACTION (Users/Delete)
                    else {
                        alert("error");
                    }
                });
                $(this).dialog("close");
            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
});

だから、私が間違っていること。クリックエラーがスローされた後、任意のアイデア

4

4 に答える 4

6

間違っていたら訂正してください。しかし、この方法の方が簡単で効果的ではありませんか

@Html.ActionLink("Delete", "Delete", 
   new { id = item.Id }, 
   new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 
于 2012-08-20T17:25:51.713 に答える
3

マークオレタの答えの議論によると、これが私がすることです:

いつものようにフォームを設定すれば、面倒なことなくユーザーから確認を得ることができます。次のHTML/JSを使用します。

<form action="/User/Delete" method="post">

    <!-- some fields here -->

    <input id="btnSubmit" type="submit" value="Delete" />

</form>

これにより、フォームがバックエンドに適切に送信されます。興味深いことに、送信ボタンをクリックすると、フォームを送信する前にjavascript/jQueryで設定されたクリックイベントが実行されます。

だからあなたはすることができます:

$("#btnSubmit").click(function(event) {

    event.preventDefault(); // --> This stops the form submit from happening.

});

confirm()ユーザーが確認するテキストボックスだけが必要な場合は、標準機能以外を使用する必要はありません。これはユーザーにメッセージを送り、同意するかキャンセルするかを尋ねます。この関数は、ユーザーの応答に応じてtrue/falseを返します。

したがって、最も単純なコードを記述できます。

$("#btnSubmit").click(function(event) {

    var confirmationmessage = "Are you sure you want to delete this?";

    if( ! confirm(confirmationmessage) ) {

        // !confirm == the user did not confirm. Therefore stop the form submission.

        event.preventDefault(); // --> This stops the form submit from happening.

    } else {

        // The user agreed. There is no else block needed, then normal form submission may occur.

    }
});

このコードは、質問のスニペットよりもはるかに単純で読みやすいものです。もちろん、ユーザーに確認を求める他の手段を使用したい場合は、それも機能します。最後にがで終わることを確認してくださいif(someboolean) { event.preventDefault(); }

于 2012-08-21T07:53:23.203 に答える
0

私はここであなたのためにJSfiddleを作成しました

投稿機能が正しく設定されていないため、関連するコードをいくつか引き出していただければ幸いです。私はそれを次のように動作させました:

$(function () {
    var deleteLinkObj;
    // delete Link
    $('.delete').click(function () {
        deleteLinkObj = $(this);  //for future use
        $('#delete-dialog').dialog('open');
        return false; // prevents the default behaviour
    });

    //definition of the delete dialog.
    $('#delete-dialog').dialog({
        autoOpen: false, width: 400, resizable: false, modal: true, //Dialog options
        buttons: {
            "Continue": function () {
              $.post(deleteLinkObj[0].href, function (data) { 
                  //do the data parsing here      
                  alert(data);     

                    });
                $(this).dialog("close");
            },
            "Cancel": function () {
                $(this).dialog("close");
            }
        }
    });
});​

ここでデータ解析を行う場所は、コントローラーが返すものを処理する必要がある場所です。通常、このようなことを行うと、コントローラーの削除アクションからの戻り値はブール値になるため、上記の Jquery で次のようなことができます。

if (data == true)
alert("success!");
else
alert("error");
于 2012-08-20T13:23:17.380 に答える
-1

これを試して:

<script type="text/javascript">

    $(document).ready(function () {
        $('form[action$="/Delete"]').submit(function () {
            return confirm('Are you sure you want to delete ?');
        });
    }); 

</script>

jQueryイベントを使用して、これですべてだと思います。http://api.jquery.com/submit/

于 2012-08-20T13:15:46.327 に答える