2015-07-11 3 views
0

Я только что написал сообщение об этом, и я подумал, что у меня это работает, но теперь я столкнулся с другой проблемой.HTML Selection - Javascript «this.value» null

У меня есть этот фрагмент Javascript:

function slideTo(target){ 
    var targetPosition = $(target).offset().top; 
    $('html,body').animate({ scrollTop: targetPosition}, 'slow'); 
} 
</script> 

Тогда у меня есть это дальше моя страница.

<select onChange="slideTo(this.value)"> 
     <option value="blank">blank</option> 
     <option value="test">TestPi</option> 
     <option value="banana">BananaPie</option> 
     <option value="chicken">ChickenPie</option> 
</select> 

У меня есть консоль открыть в Firefox, и когда я нажимаю на вариант, он бросает мне эту ошибку.

TypeError: $(...).offset(...) is null 

Просьба помочь. Также, извините, если это дубликат. Я быстро посмотрел и не мог видеть ничего, что казалось актуальным, но это, возможно, было моей формулировкой.

+1

Я предполагаю, что вы хотите получить элементы по их идентификаторам и, в вашем случае, вам не хватает '#' .., поэтому вы должны сделать «var targetPosition = $ (« # »+ jQuery (this) .val()). offset(). top;'. Вам не нужно передавать значение в качестве параметра, так как вы можете получить его из своей функции с помощью 'jQuery (this) .val()' – Mindastic

+0

@Mindastic Когда вы вызываете функцию с помощью 'onchange = slideTo()', элемент не передается как 'this'. – Barmar

+0

Да, вы правы @ Бармара. Я думал о привязке обработчика событий к jQuery. Я собираюсь отредактировать свой ответ. Спасибо, что указали это. – Mindastic

ответ

0

Nevermind, я идиот.

Мне нужно было добавить # в начало всех моих значений.

<select onChange="slideTo(this.value)"> 
     <option value="#blank">blank</option> 
     <option value="#test">TestPi</option> 
     <option value="#banana">BananaPie</option> 
     <option value="#chicken">ChickenPie</option> 
</select> 

Это исправило мою проблему. :)

+1

Зачем вам это делать, когда простое изменение в вашем скрипте может справиться с этим для вас. Сделайте это вместо «var targetPosition = $ (« # »+ target) .offset(). сверху; ' – Michelangelo

0

Поскольку вы пропусканием value конкретного варианта элемента, вы можете изменить свой селектор из:

var targetPosition = $(target).offset().top; 

Для этого:

var targetPosition = $('option[value=' + target + ']').offset().top; 
Смежные вопросы