2015-04-09 6 views
-2

Прошу прощения, если этот вопрос уже задан. Я много пробовал. но не будет работать. Если у меня есть .div1, то он отлично работает. но я удалил .div1. Консоль через ошибку, как показано ниже. Как это можно решить.Uncaught TypeError: Невозможно прочитать свойство 'top' of undefined - JQuery

Uncaught TypeError: Cannot read property 'top' of undefined

JS Fiddle

HTML

<div class="div">Console error</div> 
<!-- <div class="div1">Working</div>--> 
<div class="div2">2</div> 

JQuery

function resize() { 
var position= $('.div1').offset(); 
var top= position.top; 
    var newtop = top + 60 + "px"; 
    $('.div2').css({ 
     'top': newtop 
    }); 
} 

$(window).resize(function(){ 
    resize(); 
}); 

window.onload = resize(); 

CSS

.div1 
{ 
    position:fixed; 
    top: 40px; 
} 
.div2 
{ 
    position:fixed; 
} 

JS Fiddle

+2

'.div1' не существует, поэтому попытка доступа к свойству' null' всегда будет вызывать ошибку. Я не уверен, в чем проблема? –

+0

Переименуйте класс 'div' в' div1' – Gilsha

+0

'position' пытается найти смещение' div1', но поскольку вы его удалили, он не может его найти. Я бы предложил либо сохранить 'div1', либо положить в оператор if, который проверяет, существует ли' div1'. –

ответ

2

Вам нужно проверить, соответствует ли селектор.

function resize() { 
    var position= $('.div1').offset(); 
    if (position) { 
     var top= position.top; 
     var newtop = top + 60 + "px"; 
     $('.div2').css({ 
      'top': newtop 
     }); 
    } 
} 
+0

Его работа хорошо. Спасибо, много. – Azzah

4

Проблема в том, что вы пытаетесь получить offset() элемента, который не существует в DOM, поэтому null возвращается. Затем вы пытаетесь получить свойство из значения null, которое вызывает ошибку.

Вместо этого, при определении значения top, вам необходимо проверить, что position присвоен правильно. Попробуйте это:

var top = position ? position.top : 0; 

Обратите внимание, что это будет Абонентский к значению position.top если таковые имеются, в противном случае он будет установлен в 0.

+0

спасибо. Если мы упомянем положение top: 0 его автоматически добавили 60px в div2. – Azzah

-1

Не вычеркнуть div with class="div1" ... Ваш JQuery ориентирован этот DIV.

<div class="div">Console error</div> 
<div class="div1">Working</div> 
<div class="div2">2</div> 
Смежные вопросы