2015-03-27 2 views
2

Я рассмотрел несколько вопросов, связанных с этим, чтобы найти ответ, но не нашел его. Так вот код, который произвел ошибку:получение ошибки «undefined is not a function»

function centerGalImages() { 
    var len = $('.image').filter(':visible').length; 
    for (var i = 0; i < len; i++ { 
     var contWidth = $('.img-container')[i].width(); 
     var imgWidth = $('.image')[i].width(); 
     var leftOffset = (contWidth/2) - (imgWidth/2); 
     img.css({left: leftOffset}); 
    } 
} 

Я получаю сообщение об ошибке с вызовом width(). Я довольно новичок в JS/JQuery, но для меня это похоже, что он должен работать. В css файлы загружаются в html файл до файла jquery и вот CSS, связанные с .image и .img-container:

.image { 
    width: auto; 
    height: 100%; 
    position: relative; 
} 

.img-container { 
    display: inline-block; 
    width: 24.5%; 
    height: 200px; 
    overflow: hidden; 
} 

любые идеи о том, почему вызов width() не работает очень ценится

EDIT : в соответствии с просьбой вот Релевент HTML:

<div> 
    <div class="img-container"><img class="image clickable" src=""/></div> 
    <div class="img-container"><img class="image clickable" src=""/></div> 
    ...container/image elements are copied 16 times... 
</div> 

в src значения устанавливаются в начале jque ry файл. так по времени centerGalImages() называют эти src значения были установлены

+0

Какая ошибка возникает у вас? – dfsq

+0

'TypeError: undefined не является функцией (оценка '$ ('. Img-container ') [i] .width()')' – JDOdle

+0

Можете ли вы добавить свой HTML-код, код может быть намного проще, но нужно видеть Структура HTML. – dfsq

ответ

4

С помощью этого кода

$('.img-container')[i].width(); 

вы пытаетесь вызвать width метод HTMLImageElement. Который не существует. Отсюда и ошибка. width является метод экземпляра JQuery, поэтому он должен быть

$('.img-container').eq(i).width(); 

UPD. Согласно структуре HTML, это может выглядеть лучше:

$('.image').filter(':visible').css('left', function() { 
    var contWidth = $(this).parent().width(); 
    var imgWidth = $(this).width(); 
    return (contWidth/2) - (imgWidth/2); 
}); 
+0

'.img-container' ссылается на более чем' 'div', поэтому не следует' $ ('. Img-container') 'возвращать массив' div ' – JDOdle

+0

Да, я заметил. В этом случае вы должны использовать метод $ .fn.eq для получения соответствующего контейнера по индексу. Но лучше обеспечьте HTML, чтобы я мог дать вам гораздо лучшее решение. – dfsq

+0

html-код был добавлен – JDOdle

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