2010-07-12 3 views
1

У меня возникли проблемы с тем, что jQuery не распознает элементы на моей странице и выдает ошибку, говоря, что элементы, которые я пытаюсь выбрать, являются нулевыми.Почему jQuery не распознает элементы на моей странице?

Мы вставляем наше содержание в следующую обертку, которая поставляется клиентом:

http://www.ft.com/global/mm0802/ag/wrapper

Обертка содержит следующую строку:

<!-- ftplchol id="contentFixed" version="1.0" -->

который мы заменить с наш контент, а затем отобразите страницу.

Это пример нашего содержания: (проблема у меня описана ниже него)

<script src="/Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 

     $('.ActionControl a').live("click", function() { 
      $.get($(this).attr("href"), {}, function (result) { 
       // do stuff with result 
       }); 
      }, "html"); 

      return false; 
     }); 
    }); 
</script> 

<div class="ActionControl"> 
    <span>Fund Directory</span> 

    <span> 
     <a href="/funddirectory/DirectoryResult">A</a> 
    </span> 

    <span> 
     <a href="/funddirectory/DirectoryResult/B">B</a> 
    </span> 

    <span> 
     <a href="/funddirectory/DirectoryResult/C">C</a> 
    </span>  
</div> 

Когда я запускаю мои вещи вне контекста обертки, все в порядке. Мой код ведет себя так, как ожидалось. Но когда я запускаю полную страницу с нашим содержанием вставленным в обертку, следующая строка выдает ошибку:

$('.ActionControl a').live("click", function() {

говоря, что $('.ActionControl a') является недействительным. В частности: Microsoft JScript runtime error: 'null' is null or not an object

Это не имеет никакого смысла. $('.ActionControl a')не может и не должен быть нулевым, поскольку к тому времени, когда документ будет готов, <div class="ActionControl"> определенно существует на странице и работает, когда я не использую оболочку. Я вижу это с помощью FireBug & панели инструментов IE Dev.

Даже если я пытаюсь получить что-то вроде $('a') или $('div') (из которых есть много на странице), он по-прежнему бросает ту же ошибку. Я знаю, что jQuery работает, хотя функция $(document).ready() работает.

Есть ли у кого-нибудь идеи, почему это не сработает? Есть ли что-то в оболочке, которая мешает ему видеть мой контроль или любые другие элементы управления?

+0

Можете ли вы немного усовершенствовать свою формулировку? – ChaosPandion

ответ

6

Когда селектор jQuery не соответствует никаким элементам, он возвращает пустой массив, а не null. Это означает, что jQuery не загружен. Ваш путь «/Scripts/jquery-1.4.1.js», вероятно, недействителен в контексте их страницы «обертка». Может быть, использовать Google размещаемый версию JQuery вместо, который будет работать во всех контекстах:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript" charset="utf-8"></script> 

ОБНОВЛЕНО: Это только мне пришло в голову, что вы могли бы получить конфликт с JQuery и другой библиотекой JavaScript, который использует " $ '. Попробуйте использовать режим JQuery в «noConflict» (http://api.jquery.com/jQuery.noConflict/) и посмотреть, если он работает в этом контексте:

$.noConflict(); 
jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
}); 
+0

Я просто попытался это сделать, и она по-прежнему бросает ту же ошибку: «Ошибка выполнения JScript для Microsoft JScript:« null »является нулевым или не является объектом – DaveDev

+0

@Dave - Возможно, настало время для вы должны показать свой код, который был заменен на '// do stuff with result'. – ChaosPandion

+0

@DaveDev Я просто добавил обновление с новой идеей. – sunetos

0

Загружается ли библиотека jQuery на страницу?

+0

Да, на самом деле строка '$ (document) .ready()' отлично работает. Когда я удаляю ссылку на jQuery, эта строка не работает – DaveDev

0

Я видел этот вопрос, когда люди перезагрузки страницы, и они «заменить» JavaScript, который изначально был вызван. Ссылка на оригинальную лямбда-функцию теряется, поскольку она переписывается.

Мне было бы любопытно, если у вас есть функция переписывания блока, содержащего функцию live.

Не могли бы вы хотя бы дать нам представление о том, что делает лямбда-функция?

0

Похоже, что более ранняя версия jQuery включена и отменяет вашу версию jQuery. .live недоступен в этой версии, что, вероятно, вызывает ошибку.

Смежные вопросы