Вызов функции из содержимого ответа ajax - PullRequest
1 голос
/ 30 мая 2010

У меня есть функция, когда страница готова.

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

Это прекрасно работает на этой странице. Затем я делаю вызов .post и загружаю ответ в div. Ответ имеет

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

с результатом. Я получаю сообщение об ошибке "do_ajax () не определено". Как я могу вызвать do_ajax () из события из содержимого ajax?

Еще один.

Я использую jquery ui datepicker. Итак, когда страница загружена, я вызываю

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

Это прекрасно работает на этой странице. Затем я делаю вызов .post и загружаю ответ в div. Ответ содержит несколько полей .datepicker. Проблема в том, что недавно загруженные поля DatePicker не получают календарь, если я не верну

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

с результатом. Вы так, ребята, делаете это или есть другой способ?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 30 мая 2010

Когда вы создаете функции / переменные в области действия функции, вы не можете получить к ним доступ извне (если вы не определили их в глобальном пространстве имен).

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

EDIT:

Кроме того, имейте в виду, что код внутри:

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

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

... ожидает запуска, пока документ не будет загружен. Таким образом, код снаружи, которому требуется доступ к глобальным определенным внутри, скорее всего, будет выполняться до инициализации глобально определенного кода.

0 голосов
/ 30 мая 2010

Я думаю, что вы ищете метод Ready () в библиотеке jQuery.

Изменение:

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

Кому:

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

Это будет запускать ваше событие, только когда объектная модель документа полностью загружена.

0 голосов
/ 30 мая 2010

Проблема связана с объемом. Ваша функция 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. Вы также должны отделить свои вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...