Javascript (文档)。准备好全局范围了吗?

Javascript (文档)。准备好全局范围了吗?,javascript,jquery,Javascript,Jquery,伙计们,我的script.js中有一个函数: $(document).ready(function() { function alert() { alert('AAAAAAAA'); } }); 我试图在我的index.html中调用: $('.something').on('click', function() { e.preventDefault(); alert(); }); 但是正在显示我的此错误-未定义警报 但是,当我在外部脚本中取出准备好的文档

伙计们,我的script.js中有一个函数:

$(document).ready(function() {
    function alert() {
      alert('AAAAAAAA');
    }
});
我试图在我的index.html中调用:

$('.something').on('click', function() {
  e.preventDefault();
  alert();
});
但是正在显示我的此错误-未定义警报

但是,当我在外部脚本中取出准备好的文档时,单击处理程序将工作。为什么呢


“文档准备就绪”正在创建一个单独的作用域?

首先,e.preventDefault是一个函数,因此您必须在末尾添加大括号:

e.preventDefault()
第二个警报是javascrpt中的一个函数,因此您需要将您的函数重命名为其他函数,例如:

$(document).ready(function() {
    function special_alert() {
      alert('AAAAAAAA');
    }
});
以及:


将单击事件包括到文档中。就绪

在这里检查

使用
$(document).ready()
创建一个新的函数作用域(注意
函数()
.ready
之后),因此当调用

$(document).ready(function() {
    function alert() {
        alert('AAAAAAAA');
    }
});
警报
仅在
文档.ready
块中定义。有两种方法可以解决此问题:

  • 文档外定义函数。就绪
    块:

    function customAlert() {
        alert('AAAAAAAA');
    }
    
  • 将函数附加到
    窗口
    对象:

    $(document).ready(function() {
        window.customAlert = function() {
            alert('AAAAAAAA');
        };
    });
    

  • 您不应该使用“alert”作为自定义函数的名称,因为alert已经是javascript中的内置函数。尝试以不同的方式调用它,不要忘记在click回调函数中添加“e”作为参数。在$(“.something”,..@AdriánBolonio中调用alert()时缺少一个参数。这只是一个示例,实际函数比它们更复杂,但想法是一样的。这不是
    $(document).ready()
    正在创建作用域,但是
    函数({}
    !请每个帖子只问一个问题,我已经删除了第二个问题。如果你在中找不到答案,请再问一个问题-是的,你的版本通常比你老师的好。明白了,我会试试这个。无需重命名
    警报
    。将其放在本地范围内就足够了。这实际上并不能修复由s引起的范围界定错误eparate
    document.ready
    block。我不能,因为事件必须在html文件中,函数必须在外部文件中。尝试将函数从文档中取出,准备就绪。是函数,在文档完全加载后无需渲染,对吗?@DRX:函数声明不需要在
    $(文档)中.ready
    handler-但必须收听点击事件!请同时建议不要使用第二种解决方案:-)@Bergi老实说,第一种和第二种解决方案之间没有任何实际区别,所以我不明白为什么不应该使用它。回答很好,这是我一直在寻找的。“警告”也是浏览器在JavaScript中定义的一种方法,并非所有浏览器都允许您使用自己的功能覆盖它。@mc10:当然有:
    customAlert
    功能可用的时间。如果在ready处理程序中创建它,则在此之前不能调用它。
    function customAlert() {
        alert('AAAAAAAA');
    }
    
    $(document).ready(function() {
        window.customAlert = function() {
            alert('AAAAAAAA');
        };
    });