0

長い間、確認ボックスの表示に苦労してきました。問題は、ドロップダウン リスト div = "Module" があり、ドロップ ダウン リストで任意の値を選択すると、対応する値が別の div = "DivRoles" に表示されることです。ドロップダウンで他のモジュールをクリックして DivRoles で変更が行われた場合は、変更を保存する必要があるため、確認ボックスを表示して変更を保存する必要があります。

コード スニペットは次のとおりです。

<div id="roledef" >
        <div class="formlabel">
            <div align="right" class="label">Select Module:</div>
        </div>
      <!--- Here is my Module drop down whose id = "Module"---->
        <div class="formlabel">
            @Html.DropDownListFor(model => model.Module, (IEnumerable<SelectListItem>)ViewBag.lstm, "-----Select-----")
        </div>
        <div style="clear: both;"></div>
         <br/>
      <!------------I display the values here in id="DivRoles"------------->
         <div id="DivRoles" align = "center" >
            @Html.DropDownListFor(model => model.UserRole, new SelectList(ViewBag.lstroles, "RoleID", "RoleName", Model.UserRole), new { multiple = "multiple" })
        </div>



        <div align = "center" >
            @Html.DropDownListFor(model => model.UserRole, new SelectList(ViewBag.lstroles, "RoleID", "RoleName", Model.UserRole), new { multiple = "multiple", @id = "rolesoriginal" })
        </div>

          <div style="clear: both;"></div>
             <div class="formelement">
        <script src="@Url.Content("~/Scripts/jquery.multi-select.js")" type="text/javascript"></script>

         </div>

ドロップダウンで値をクリックするたびに、UpdateRoles() 関数を呼び出しています。したがって、最初にクリックしたときに確認ボックスは必要ありません。また、divをクリックした後も、変更が行われていなければ確認ボックスは必要ありません。DivRoles タグで変更が行われた場合にのみ、ユーザーが他の div をクリックした場合に保存する必要があります。

次のjqueryを試しています:

$('#Module').change(ifChangeSave);

function ifChangeSave() {
    //UpdateRoles();
    $("#divbackgroundLogoff").show();
    jConfirm('Yes', 'No', '', 'Are you sure you want to Save the changes?', function (ans) {
        if (!ans)
            return false;
        else {
            UpdateRoles();
        }
    });
}

ここでの問題は、変更が発生するたびに UpdateRoles がロードされることです。これに対するより良い解決策があれば助けてください。ありがとう、N.C.

アップデート:

その .change() ではなく .onchange() 関数

4

2 に答える 2

1

実際にはjConfirm3 つの引数があり、4 つ与えられた場合は、このDEMOをチェックしてください

jConfirm('Can you confirm this?', 'Confirmation Dialog', function(r) {
    jAlert('Confirmed: ' + r, 'Confirmation Results');
});

わかりましたので、このように試してみてください

$(document).click(function(e) {
    var target = e.target;

    if (!$(target).is('#formlabel') && !$(target).parents().is('#roledef')) {
       ifChangeSave();
    }
});

この方法を試してください

$('#roledef').on('click',function(e) {
     // Do your work
});

$('#Module').change(function(event) { 
    event.stopPropagation();
    // Dow your work
});
于 2012-09-28T06:10:24.813 に答える
1

これを試して:

$(function () {
    var ModuleSave;
    $("#Module").change(function () {
        ModuleSave = $(this).val();
        $("#Module").change(ifChangeSave);
    }
    function ifChangeSave() {
        //UpdateRoles();
        $("#divbackgroundLogoff").show();
        jConfirm('Yes', 'No', '', 'Are you sure you want to Save the changes?', function (ans) {
            if (!ans) {
                $("#Module").val(ModuleSave);
                return false;
            } else {
                UpdateRoles();
            }
        });
    }
});

ページが読み込まれると、最初の変更ハンドラーは、2 回目に変更された場合に確認を求める後の変更ハンドラーを有効にするだけです。

于 2012-09-28T06:29:45.287 に答える