从ajax响应内容调用函数

时间:2010-05-29 23:30:19

标签: jquery ajax datepicker

页面准备好后我有一个功能。

<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字段。问题是新加载的datepicker字段除非我返回

,否则不会获取日历
<script>$(".datepicker").datepicker();</script>

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

$(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

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

答案 1 :(得分:0)

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

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

更好的方法是在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控件不够熟悉。您也应该将问题分开。

答案 2 :(得分:0)

我认为你在jQuery库中寻找Ready()方法。

变化:

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

要:

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

这只会在文档对象模型完全加载时运行您的事件。