【问题标题】:JavaScript error says "confirm is not a function"JavaScript 错误提示“确认不是函数”
【发布时间】:2011-12-24 23:31:20
【问题描述】:

我在提交表单时使用 jQuery 和验证插件:

$('.frmProject:visible').validate( {

    errorContainer: ".site_details:visible .messageBox1",
    errorLabelContainer: ".site_details:visible .messageBox1 span.messagehere",
    invalidHandler: function(form, validator) {
    },

    rules: {
        site_id: {
            required: true,
        }
    },
    messages: {
        site_id: "Project has no assigned site information. Click the marker on the map at left to specify the site where this project took place."
    },
    submitHandler: function(data) {
        SaveProject();
    }

});

在submitHandler中,

function SaveProject(){
    //... load variables with input contents
    $.ajax({
        url: 'ajax/save_project.php',
        dataType: 'json',
        data: 'id='+id+'&title='+title+'&project='+project+'&sector='+sector+'&volunteer='+volunteer+'&lat='+lat+'&lng='+lng+'&name='+name+'&mun='+mun+'&prov='+prov,
        success: function(data) {
            //... load 'messages' object with stuff
            $.each(messages, function(key, value) {
                if (confirm(key)){
                    console.log(item);
                }
            });
        }
    });
}

当我提交经过验证的表单并进入每个循环内的确认时,我收到错误消息:“确认不是函数”。

如何向用户显示消息以进行确认?

编辑:

当我在控制台中输入“确认”时,我得到了这个:

在 DOM 中检查显示:

窗口 > 确认() 该对象没有可显示的属性。

Inspecting in Script 将我带到 jquery-1.6.2.min.js 中的一个地方

【问题讨论】:

  • 您是否尝试执行 window.confirm(key)?确认定义在哪里?
  • 我猜 1) 发生了一些变化 window.confirm 或 2) 有一个名为 confirm 的变量...看看 confirm 的计算结果不会有什么坏处。
  • @Keyslinger 在 JavaScript 控制台中输入“确认”。
  • @DaveNewton 查看我的编辑。当我在控制台中输入 confirm('test') 时,确认执行良好。
  • 你能在success函数中做console.log(confirm)吗?如果您在函数范围内覆盖了确认,则在控制台中测试确认时它不会显示。

标签: jquery-ui validation jquery jquery-plugins


【解决方案1】:

确认函数是窗口对象的一部分。

if (window.confirm(key)){
    console.log(item);
}

【讨论】:

  • 是的,但是 window 是全局 [[scope]],所以有些不对劲 ;-)
  • @pst 嗯。 console.log(confirm) 说什么?
  • @sissonb 当我将 console.log(confirm) 放入循环时,它打印了我的一条错误消息。经过进一步检查,我发现我在将消息放入消息对象之前使用了一个名为“confirm”的变量来存储消息。如果你写一个关于没有名为“确认”的变量的答案,我会给你信用!
【解决方案2】:

如果您分配一个不带 var 的变量,您就是将该变量分配给全局空间。在您的情况下,分配给确认变量的字符串覆盖了本机确认方法。

【讨论】:

  • 在我原来的问题中由//... load 'messages' object with stuff 替换的代码中,我做了以下操作:confirm = 'The site ' + data.site_with_same_coords.name + ' already exists in the location you have indicated';
【解决方案3】:

使用属性 id ="confirm" 定义任何 html 对象也会导致此错误

【讨论】:

    【解决方案4】:

    我同时使用“jquery confirm”和“datatables”,在我的例子中,“datatables”应该在“jquery confirm”之前导入。

    因此,在某些情况下,请尝试重新排序 ........

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 2015-06-27
      • 2011-06-20
      相关资源
      最近更新 更多