2011-01-26 2 views
1

Я пытаюсь вызвать какой-то скрипт на новой вкладке, загруженной ajax, но похоже, что блоки скриптов внутри вкладки не обрабатываются вообще, поэтому, когда я перехожу к вызову функции на вкладке функция не может быть найдена. Есть ли способ правильно загрузить содержимое вкладки, чтобы интерпретировать сценарии?Загрузка документов со скриптами в вкладке Ajax

Я пробовал играть с опциями ajax, но это, похоже, не помогает.

$("#tabs").tabs({ 
      ajaxOptions: { 
       error: function (xhr, status, index, anchor) { 
        $(anchor.hash).html("This tab not yet built, sorry bub."); 
       }, 
       dataType: 'html' 

      }, 
      spinner: 'Loading tabs...', 
     }); 

В закладках у меня есть что-то вроде

<script type="text/javascript"> 
    function SetupTab(){ 
    alert('loaded'); 
    } 
</script> 

но

$("#tabs").bind("tabsshow", function(event, ui){ SetupTab();}); 

не может найти SetupTab. Даже если я разрешаю вкладке загружаться, а затем пытаюсь вызвать SetupTab из firebug, ее не найти.

ответ

2

если вы пытаетесь связать любые события/действия в виде HTML-элемент, который не существует до сих пор есть

$(document).ready(function(){ 
//apply elemnt bindings here 
}); 

когда вы загрузите элементы, используя AJAX элементов не будет брать на переплетах вы поставляемые на документе потому что они не существовали в этот момент.

Добавить вызов вашего вызова ajax, чтобы связать любые события/функции с новыми элементами html, тогда это должно сработать.

Я думаю, это то, к чему вы обращались.

EDIT: попробуйте это.

$("#tabs").bind("tabsshow", function(event, ui){ alert('loaded');}); 

EDIT СНОВА: вы могли бы попробовать это.

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

//lets say the data returned from your ajax call: 
data = function SetupTab(){alert('loaded');} 
eval(data); 

, то вы могли бы назвать, что функция не проблема.

EDIT 3RD TIME: Если вы не можете удалить теги сценария со страницы вашей загрузки, вы можете повторно задать html. с этим рисунком.

pattern = /<script\b[^>]*>(.*?)</script>/i 
urscript = data.match(pattern); 
eval(urscript[1]); 

это должно работать.

+0

Это не элементы У меня возникли проблемы с, но скрипты которые находятся внутри вновь загруженной вкладки. – stimms

+0

Именно потому, что они находятся внутри HTML, и что вы скажете своему сценарию Ajax, возвращаемое значение - это HTML, когда есть встроенный крипт. – Nabab

+0

Согласно документации $ .ajax dataType «html»: возвращает HTML как обычный текст; включенные теги скриптов оцениваются при вставке в DOM. Какой тип данных я должен использовать? – stimms

0

Что вы можете сделать, так это также отделить ваш аякс-вызов от элемента (например, $ .getScript).
Ваша загрузка функции вкладки должны сделать что-то вроде этого:

<div class="tabs" onclick="$.getScript('myScript.php?index='+$(this).index(#tabs"))">... 

Затем серверный скрипт должен возвращать что-то вроде этого:

echo ' 
$("#tabs").eq('.$_GET['index'].')html("'.$myHTML.'"); 
/* Then the rest of your JS script (what you had in your HTML output) */ 
'; 
Смежные вопросы