'未捕获的TypeError:布尔值不是函数'

时间:2014-08-05 18:53:05

标签: jquery html

我有一个按钮可以在点击时删除横幅。我想添加一个对话框,如果用户意外点击了该按钮,将要求确认。我添加了这段代码(我已经多次使用它并且每次都使用它):

$('.rem_cover_btn').click(function(){
    confirm = confirm("Are you sure you want to remove your banner?");
    if(confirm){
        window.location='../modules/user/removeBanner.php';
    }
});

当我点击按钮时,会出现对话框,如果我点击“取消”并重复该操作,则不会显示对话框,我只是在Chrome开发控制台中收到此消息:

  

Uncaught TypeError:boolean不是函数'

所以:'删除横幅'按钮点击>取消操作>再次点击按钮>显示错误

我不知道为什么它第一次起作用,每次之后都会出现错误。

3 个答案:

答案 0 :(得分:2)

我认为您应该将代码更改为:

$('.rem_cover_btn').click(function(){ var confirmResult; confirmResult = confirm("Are you sure you want to remove your banner?"); if(confirmResult){ window.location='../modules/user/removeBanner.php'; } });

<强>说明: 你不小心&#34;重写&#34; confirm功能。没有var的变量声明在全局范围内变量(或重写某些东西)。 在你的情况下:

  • 你调用confirm函数并重写变量&#34; hold&#34;这个功能
  • 您尝试第二次调用此函数,但现在变量confirm包含布尔值

答案 1 :(得分:2)

这行代码覆盖原生confirm函数

confirm = confirm("Are you sure you want to remove your banner?");

它用confirm的结果覆盖它,这是一个布尔值。下次执行此代码时,confirm是一个布尔值,当使用()时会产生错误,因为它期望存在一个函数。

考虑避免使用与实际原生api名称相关的变量名称。也许removeBanner,因为它是一个更具描述性的名称。此外,如果没有使用var为变量名添加前缀,它将使用全局范围。这也是一个明显的问题,使用var将在未来避免重大问题。

$('.rem_cover_btn').click(function(){
 var removeBanner = confirm("Are you sure you want to remove your banner?");
 if(removeBanner){
  window.location='../modules/user/removeBanner.php';
 }
});

答案 2 :(得分:0)

你必须声明一个var:

$('.rem_cover_btn').click(function(){
    var confirm = confirm("Are you sure you want to remove your banner?");
    if(confirm){
        window.location='../modules/user/removeBanner.php';
    }
});