2012-09-09 3 views
1

Я реализую бесконечный прокрутки на своей веб-странице, на которой отображаются изображения. Изображения выравниваются с помощью masonry. Первоначально, когда страница загружается, я помещаю 10 изображений только в #container div. И все изображения выравниваются правильно, используя код ниже, без ошибок в консоли chrome script.Получение ошибки в контейнере Masonry.append Uncaught TypeError: объект не имеет фильтра метода

var $container = $('#container'); 
     $container.imagesLoaded(function(){ 
     $('#container').masonry({ 
      itemSelector: '.box', 
      columnWidth: 200, 
      isAnimated: true 
     }); 
    }); 

но, как пользователь прокручивает вниз я

$.ajax({ 
     url: "load.php?offset="+1+"&quantity="+1, 
     success: function(html){ 
     if(html){ 
        var $container = $('#container'); 
        var $test = "<div>even doing this causes error </div>"; 
       $container.append($test).masonry('appended',$test); 
     } 
    }); 

Теперь, когда я когда-либо прокручивать вниз я получаю ниже ошибок в хромированной консоли и прилагаемые изображения придумать сложены.

Uncaught TypeError: Object <div class....... </div> has no method filter 
+0

Ваш примерный код не подходит для вашего сообщения об ошибке. Сообщение об ошибке, которое вы получаете с этим кодом, - 'Uncaught TypeError: Object $ test не имеет фильтра метода '. Если вы удалите цитаты вокруг '$ test', вы получите' Uncaught TypeError: Объект

even doing this causes error
не имеет фильтра метода '. Очевидно, вы должны передать объект jQuery в 'masonry()' вместо String. – j0ker

+0

, когда вы говорите «передайте объект jquery», что вы имеете в виду? $ test - переменная – PUG

+0

Которая содержит строку ("

even doing this causes error
"). Я никогда не использовал кладки, но из сообщения об ошибке, я думаю, он пытается вызвать '$ test.filter (...)', который является методом объекта jQuery и не работает с объектом String. В вашем примере замените строку выше на «var $ test = $ («
even doing this causes error
»);'. Это делает объект jQuery из строки. Ошибка должна исчезнуть. – j0ker

ответ

13

Как я изложил в своем комментарии, сообщение об ошибке, которое вы получаете, типично при работе с jQuery. filter() - это метод объектов jQuery. кладка, похоже, пытается называть его любым объектом внутри вашей переменной $test, которая в вашем примере является объектом String. В принципе, он называет

"<div>even doing this causes error </div>".filter(...) 

который производит вашу ошибку.

Чтобы все работало, вы должны передать метод masonry() объекту jQuery вместо String (или любого другого объекта JavaScript). Если у вас есть строка, например. в результате вызова AJAX вы можете преобразовать его в объект jQuery, используя функцию jQuery. Для вашего примера:

$test = $("<div>even doing this causes error </div>"); 

Это создает div-объект jQuery, который должен использоваться с кладкой.

Еще один намек: вы, кажется, приписываете все свои переменные JavaScript знаку $. Хотя это зависит от вас, я бы рекомендовал префикс только для переменных, которые содержат объекты jQuery с $ и не префикс каких-либо других переменных. Итак, для Strings вы просто используете var test = "String";. Это соглашение, которое я нашел весьма полезным. Кроме того, это облегчит для других людей понимание вашего кода.

+0

Это также работает, если у вас есть html, исходящий из вызова AJAX: var boxes = $ (ajaxContent.html()); $ ('# container'). Append (boxes) .masonry ('appended', boxes); –

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

  • Нет связанных вопросов^_^