Javascript 无法在确认框中获取更新的全局变量值 var customDiv=“你好”; $(函数(){ var$form=$(“#authenticationform”); var startItems=$form.serializeArray(); startItems=DarrayToHash(startItems); $(“#authenticationsubmit”)。单击(函数(e){ var currentItems=$form.serializeArray(); currentItems=convertSerializedArrayToHash(currentItems); var itemsToSubmit=hashDiff(起始项、当前项); for(itemsToSubmit中的var项){ customDiv=“测试”; } }); $(“.confirm”).confirm({ text:“确实要更新以下更改吗?”+customDiv, 确认:功能(按钮){ //做点什么 }, 取消:功能(按钮){ //做点什么 }, confirmButton:“是的,我是”, 取消按钮:“否”, 波斯特:是的 });

Javascript 无法在确认框中获取更新的全局变量值 var customDiv=“你好”; $(函数(){ var$form=$(“#authenticationform”); var startItems=$form.serializeArray(); startItems=DarrayToHash(startItems); $(“#authenticationsubmit”)。单击(函数(e){ var currentItems=$form.serializeArray(); currentItems=convertSerializedArrayToHash(currentItems); var itemsToSubmit=hashDiff(起始项、当前项); for(itemsToSubmit中的var项){ customDiv=“测试”; } }); $(“.confirm”).confirm({ text:“确实要更新以下更改吗?”+customDiv, 确认:功能(按钮){ //做点什么 }, 取消:功能(按钮){ //做点什么 }, confirmButton:“是的,我是”, 取消按钮:“否”, 波斯特:是的 });,javascript,jquery,dialog,modal-dialog,confirmation,Javascript,Jquery,Dialog,Modal Dialog,Confirmation,我所要做的就是在表单加载时获取表单的serializeArray。然后在提交时再次更改字段后,单击获取表单的新serializedArray比较2并获取更改的字段,然后在确认框上仅显示用户更改的字段。但确认框显示的是hello,而不是测试。 我的假设是,确认框文本已加载到document ready上,并且从未更新,因此它始终具有在document ready上设置的全局变量值。 (我正确地获取了更新的值,因此序列化和hashDiff函数可以正常工作,而不是问题。问题只是将此值获取到确认框。)

我所要做的就是在表单加载时获取表单的serializeArray。然后在提交时再次更改字段后,单击获取表单的新serializedArray比较2并获取更改的字段,然后在确认框上仅显示用户更改的字段。但确认框显示的是hello,而不是测试。 我的假设是,确认框文本已加载到document ready上,并且从未更新,因此它始终具有在document ready上设置的全局变量值。 (我正确地获取了更新的值,因此序列化和hashDiff函数可以正常工作,而不是问题。问题只是将此值获取到确认框。)
感谢您的关注。

您正在加载时设置
文本:
选项。稍后更改
customDiv
不会影响它,因为连接是在较早时完成的

不要将确认对话框直接绑定到按钮,而是使用
$。确认
,以便在调用时传递参数:

 <script type="text/javascript">
   var customDiv  ="hello";
   $(function () {
    var $form = $("#authNotificationForm");

    var startItems = $form.serializeArray();     
    startItems = convertSerializedArrayToHash(startItems);

    $("#authNotificationSubmit").click(function (e) {  
        var currentItems = $form.serializeArray();
        currentItems = convertSerializedArrayToHash(currentItems);

        var itemsToSubmit = hashDiff(startItems, currentItems);

        for (var item in itemsToSubmit) {
            customDiv = "test";
        }
    });

  $(".confirm").confirm({
        text: "Are you sure you want update the following changes?" + customDiv,
        confirm: function (button) {
            // do something
        },
        cancel: function (button) {
            // do something
        },
        confirmButton: "Yes I am",
        cancelButton: "No",
        post: true
    });
</script>

您能否验证
itemsToSubmit
确实不是空的?是的,它不是空的,我使用调试器看到它。for循环中的代码正在监视窗口中执行customDiv值更改。但是当确认框打开时,它仍然具有在加载时设置的全局变量值。哦,我明白了。您缺少
脚本中的某个地方(可能就在
$(“#authNotificationSubmit”)之后)。单击
。您可以立即创建
确认
模式,它始终使用
customDiv
的初始值。我不确定
如何工作。确认
能否以某种方式更改文本?非常感谢您花时间和精力帮助我。您能否向我解释一下为什么直接绑定到按钮工作不正常??我现在真的很困惑。你调用
$(“#.confirm”).confirm()
在加载时,并提供一个文本选项。此时会发生连接,因为它只是一个对象文本,而不是稍后单击按钮时调用的函数。通常,如果要编写稍后执行计算的内容,它必须在函数中。如果它只是普通参数,则它会得到execu当时泰德。哦,好的,我明白了。这样一个核心概念,我从来没有这样想过。再次感谢。
$(".confirm").click(function() {
    $.confirm({
        text: "Are you sure you want update the following changes?" + customDiv,
        confirm: function (button) {
            // do something
        },
        cancel: function (button) {
            // do something
        },
        confirmButton: "Yes I am",
        cancelButton: "No",
        post: true
    });
});