获取div中更改的确认框

时间:2012-09-28 05:58:39

标签: jquery jquery-ui

很长一段时间以来,我一直在努力展示确认框。问题是我有一个下拉列表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都会加载。 如果有更好的解决方案,请帮忙。 谢谢,NC

更新:

它的.change()而不是.onchange()函数

2 个答案:

答案 0 :(得分:1)

实际jConfirm你有4个参数给出chck 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
});

答案 1 :(得分: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();
            }
        });
    }
});

当页面加载时,初始更改处理程序只启用后面的更改处理程序,如果第二次更改,则会要求确认。