2010-07-25 85 views
2

我有这个简单的代码

$(document).ready(function(){ 

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

    function deleteImg(id) { 
     foo... 
    } 

} 

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

deleteImg is not defined 

我必须把deleteImg函数放出$(文档)。 ready()工作吧

为什么?

非常感谢!

回答

7

当一个函数的字符串版本叫,好像在onclick="deleteImg(id)"它执行在全球范围内,这意味着它基本上是在寻找:

window.deleteImg 

但它不存在,它只是在你的document.ready定义处理程序的范围。你最好结合的处理直接,就像这样:

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

或者,将其存储在数据元素上,如果是用于其他的事情,比如:

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

或者结合起来所有,并以此方式访问它:

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

不错的答案.... + 1 – 2010-07-25 14:01:32

+0

现在效果更好! 感谢所有! :-) – Roberto 2010-07-25 15:43:13

+0

+1,(*但你需要逃避你的报价或在外面使用单一的..,只是挑剔.. *) – 2010-07-25 16:45:49

3
function foo() { 
    function bar() { alert("Hello!"); } 
    var baz = 123; 
} 

在上述片段中,bar函数是本地功能foo。这与baz变量对foo函数的局部变量如何相同:在foo之外不能访问baz,并且不能以完全相同的方式访问foo之外的bar

1

由于范围。 deleteImg在您的匿名ready()函数中声明,并未在其外部定义。

1

deleteImg对于您正在馈入$(document).ready()的函数闭包是本地的。试试这个:

window.deleteImg = function(id) { 
    foo... 
} 
1

此外,你可以使用jQuery添加点击事件。

$.ajax({ 
    success: function(id) { 
     $('#ele').append('<a href="" class="deleteImg">'); 
     $('.deleteImg').click(function() { 
     window.deleteImg($(this).id); 
     }); 
    } 
}) 

它可能看起来有点大材小用了,但如果代码变得更加复杂,甚至是现在的方式,它通常是一个好主意,让到JavaScript和HTML除了尽可能多地。这是首先使用jQuery的主要原因之一。

相关问题