Вызов функции, определенной на странице содержимого, загруженной вкладками jQuery - PullRequest
2 голосов
/ 30 марта 2010

Я хочу вызвать метод обратного вызова, который может или не может быть реализован на страницах, загружаемых в виде содержимого Ajax с помощью вкладок jQuery.Другими словами, у меня есть набор вкладок jQuery, которые загружают контент, отображаемый в файлах JSP.Некоторые из этих файлов содержат дополнительный контент Ajax, некоторые нет.

Что я мог бы сделать:

$(document).ready(function() {
    $("#menu").tabs( {
        cache: false,
        ajaxOptions: {cache: false},
        load: function(event, ui) {
            if (ui.index == index_of_tab_with_additional_content) {
                //call code defined in other places and embedded using <script> tags
            }
        }
    });
});

Но у этого есть несколько недостатков - все обратные вызовы должны быть объявленыв сценариях, встроенных в мою главную вкладку, вместе со всем, от чего они могут зависеть - не элегантно!Кроме того, я хотел бы иметь возможность вызывать тот же обратный вызов, чтобы избежать постраничного оператора if / else.Короче говоря, я хотел бы иметь что-то вроде

load: function(event, ui) {
        callback();   //Each tab would implement this differently, or not at all
    }
}

К сожалению, я не мог понять, как вызывать функции скрипта, объявленные в контенте.Как отмечалось в других темах, Javascript не загружается jQuery.

Видимо, для этого должна быть установлена ​​опция, но я не мог выяснить, какая именно.

И если бы была установлена ​​опция и загружен JS, как бы я получил доступ к функциям?Будет ли это ui.panel.funcname ();?

Спасибо, ES

1 Ответ

2 голосов
/ 30 марта 2010

JQuery не будет загружать содержимое сценария, расположенное в заголовке документа, загружаемого через AJAX, но будет загружать содержимое сценария из тела. Самый простой способ справиться с этим, если вы не хотите, чтобы код на главной странице (с использованием обработчиков live), состоял в том, чтобы ваша главная страница загружала любые внешние файлы сценариев, требуемые любыми вкладками, и содержала содержимое для каждой вкладки "" механизм обратного вызова для того, что нужно сделать, когда вкладка загружена. Вы должны быть осторожны, осознавая, что все вкладки могут быть загружены в DOM одновременно, что требует различий в именах между вкладками и, возможно, квалификации любых селекторов так, чтобы они относились к контейнеру вкладок, но это выполнимо.

Ex.

  <html>
  <head>
      ...
      <script type="text/javascript">
          // I'm not going to be loaded via AJAX
      </script>
  </head>
  <body>
  <div id="homeTab" class="tab-content">
       ...
       <a href="#" class="clickable button">Click Me</a>
       ...
  </div>
  <script type="text/javascript">
      $(function() {
          // here be stuff which runs when the tab is loaded
          var $tab = $('#homeTab');
          $('a.button',$tab).click( function() {
              ...do something...
              return false;
          });
      });
  </script>
  </body>
  </html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...