从ajax响应内容调用函数

问题描述:

当页面准备就绪时,我有一个函数。从ajax响应内容调用函数

<script> 
$(function(){ 
    function do_ajax(){ 
    do some stuff 
    } 
});.... 

这在这个页面很好用。然后我做一个.post调用并将响应加载到一个div中。响应有一个

<script>$(selector).click(function(){ do_ajax(); });</script> 

与结果。我收到一个错误“do_ajax()未定义”。我如何从ajax内容的事件中调用do_ajax()?

另一个。

我正在使用jquery ui datepicker。所以,当页面加载时,我调用了

$(".datepicker").datepicker(); 

这在这个页面上很好用。然后我做一个.post调用并将响应加载到一个div中。该响应有几个.datepicker字段。问题是新加载的日期选择器字段没有得到日历,除非我返回

<script>$(".datepicker").datepicker();</script> 

与结果。你们是这样做的还是以另一种方式?

谢谢!

在函数范围内创建函数/变量时,不能从外部访问它们(除非在全局名称空间中定义它们)。

$(function(){ 
    // I'm inside a function 

    var a = function() {...} // Defined locally 

    b = function() {...} // Defined globally 
}); 

// I can't call a() 

// I am able to call b() because it is defined in global namespace. 

编辑:

而且,记住里面的代码:

$(function() { 
    ... 
    b = function() {...} // Defined globally 
}); 

b(); // Fails, because the document hasn't fully loaded, so 'b' has not been initialized 

...等待运行,直到该文件被加载。因此,需要访问内部定义的全局变量的代码可能会在全局定义的代码初始化之前执行。

+0

+1回答&耐心等待! ;-) – 2010-05-29 23:56:08

+0

谢谢!阅读“示波器”一词并拍打自己。 – pistolshrimp 2010-05-30 00:08:55

+0

@aSeptik - 感谢+ :) – user113716 2010-05-30 00:09:32

问题与范围有关。你的do_ajax函数在加载页面时在函数运行的范围内声明 - 因此你不能在页面的任何地方任意调用它。

有几种方法可以尝试解决这个问题,最简单的方法是将do_ajax函数定义移动到onLoad代码之外,但这也会污染全局名称空间并且通常不太理想。

更好的方法是在您加载代码期间,将选择器上的click方法绑定到调用do_ajax()的函数。它会围绕它创建一个闭包,随后的点击事件将知道如何正确触发。

$(function(){ 
    function do_ajax(){ 
    // do some stuff 
    } 
    // bind the click handler 
    $(selector).click(function(){ do_ajax(); }); 
}); 

再后来......

$(selector).click(); // fire the click event, which will call do_ajax() 

另外请注意,你可能应该返回true或false从你的点击处理函数,因为这将控制事件的冒泡。

我对datepicker控件不够熟悉。你也应该把你的问题分开。

我想你在寻找jQuery库中的Ready()方法。

变化:

$(selector).click(function(){ do_ajax(); }); 

要:

$(document).ready(function(){$(selector).click(function(){ do_ajax(); }})); 

当文档对象模型是完全加载这只会运行事件。

+0

OP给出的第一个代码示例等同于'$(document).ready(function(){...});'。有效地,同一件事的更短版本。如果他已经在单独的'.ready()'函数中定义了'.click()'事件处理程序,他仍然会遇到范围问题。你说得对。他可以将整个事物定义为一个整体,并且可以解决问题。 :o) – user113716 2010-05-30 00:17:43

+0

我想我错过了这个问题,我以某种方式假定他正在谈论能够访问他的函数后设置的变量,这需要在这些变量可见之前等待DOM完成。不管怎么说,多谢拉! – RobertPitt 2010-05-30 00:27:31