函数$('document').ready()

Rob*_*rto 2 jquery

我有这个简单的代码

$(document).ready(function(){

   $.ajax({
      success: function(id) {
         $('#ele').append('<a href="" onclick="deleteImg(id)">')
      }
   })

   function deleteImg(id) {
      foo...
   }

}
Run Code Online (Sandbox Code Playgroud)

但是,当我点击创建的href时,我收到了这个错误

deleteImg is not defined
Run Code Online (Sandbox Code Playgroud)

我必须将deleteImg函数放在$(document).ready()中才能使用它

为什么?

非常感谢!

Nic*_*ver 7

当调用函数的字符串版本时,就像onclick="deleteImg(id)"它在全局上下文中执行一样,这意味着它基本上是在寻找:

window.deleteImg
Run Code Online (Sandbox Code Playgroud)

但它不在那里,它只在你的document.ready处理程序范围内定义.你最好直接绑定处理程序,如下所示:

$(function(){
   $.ajax({
      success: function(id) {
         $("<a href='#'></a>").click(function() {
           deleteImg(id);
         }).appendTo('#ele');
      }
   })
   function deleteImg(id) {
      //foo...
   }
});
Run Code Online (Sandbox Code Playgroud)

或者,如果它用于其他内容,则将其存储在元素的数据中,如下所示:

     $("<a href='#'></a>").data('id', id).click(function() {
       deleteImg($.data(this, 'id'));
     }).appendTo('#ele');
Run Code Online (Sandbox Code Playgroud)

或者,将它们组合在一起,并以这种方式访问​​它:

$(function(){
   $.ajax({
      success: function(id) {
         $("<a href='#'></a>").data('id', id).click(deleteImg).appendTo('#ele');
      }
   })
   function deleteImg() {
      var id = $.data(this, 'id');
      //foo...
   }
});
Run Code Online (Sandbox Code Playgroud)