(文件).ready是一个全球范围?

时间:2015-02-07 21:01:31

标签: javascript jquery

伙计们我在script.js中有这个功能:

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

我试图在我的index.html中调用:

$('.something').on('click', function() {
  e.preventDefault();
  alert();
});

但是显示我的错误 - 未定义警报。

但是当我在外部脚本中取消文档时,单击处理程序将起作用。那是为什么?

准备好的文件正在创建一个单独的范围?

3 个答案:

答案 0 :(得分:4)

使用$(document).ready()创建新的功能范围(请注意function()之后的.ready),因此当您致电时

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

alert仅在document.ready块中定义。有两种方法可以解决这个问题:

  1. 定义document.ready块之外的函数:

    function customAlert() {
        alert('AAAAAAAA');
    }
    
  2. 将函数附加到window对象:

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

答案 1 :(得分:1)

将click事件包含在document.ready

在此处查看http://jsfiddle.net/fbrcm45q/1/

$(document).ready(function() {
  function showAlert() {
    alert('AAAAAAAA');
  }
  $('.something').on('click', function(e) {
    e.preventDefault();
    showAlert();
  });
});

答案 2 :(得分:0)

首先,e.preventDefault是一个函数,所以你必须在最后添加大括号:

e.preventDefault()

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

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

$('.something').on('click', function() {
  e.preventDefault();
  special_alert();
});