#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Я пытаюсь вернуть значение, связанное с классом на html-странице. Он не возвращает указанное значение, он возвращает неопределенное. Я добавил консоль.войдите, чтобы показать, что я выводю, и в нем указано неопределенное.
$(document).on("change", "select.playlist", function() {
var select = $(this);
var songId = select.prev(".songId").val();
var playlistId = select.val();
//selects dropdown menu thats currently selected
console.log("playlistId: " playlistId);
console.log("songId: " songId);
});
function showOptions(button) {
var songId = $(button).prevAll(".songId").val();
var menu = $(".optionsMenu");
var menuWidth = menu.width();
menu.find(".songId").val(songId);
var scrollTop = $(window).scrollTop();
var elementOffset = $(button).offset().top;
var top = elementOffset - scrollTop;
var right = $(button).position().right;
menu.css({
"top": top 8 "px",
"right": menuWidth - 100 "px",
"display": "inline"
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='songOptions'>
<input type='hidden' class='songId' value='" . $albumTrack->getId() . "'>
<img class='optionsButton' onclick='showOptions(this)' src='assets/images/icons/more.png'>
</div>
Console.log() должен выводить значение, соответствующее тому, которое вы видите при проверке элементов.
Комментарии:
1. куда вы включаете свой js-файл в html-документе? вам следует рассмотреть возможность размещения вашей логики внутри $(document) . ready() таким образом, весь ваш html загружается перед вашим js. Я предполагаю, что ваш js загружается первым, и именно поэтому у вас есть undefined
Ответ №1:
Проблема, с которой вы сталкиваетесь, на самом деле заключается в том, что когда вы вызываете this
в onclick, как вы, вы получаете HTML
тег, а не сам объект. Я удалил onclick и изменил его на прослушиватель событий щелчка, и это работает.
$(document).on("change", "select.playlist", function() {
var select = $(this);
var songId = select.prev(".songId").val();
var playlistId = select.val();
//selects dropdown menu thats currently selected
console.log("playlistId: " playlistId);
console.log("songId: " songId);
});
$(document).on("click",".optionsButton",function(){
var songId = $(this).prevAll(".songId").val();
console.log(songId);
var menu = $(".optionsMenu");
var menuWidth = menu.width();
menu.find(".songId").val(songId);
var scrollTop = $(window).scrollTop();
var elementOffset = $(this).offset().top;
var top = elementOffset - scrollTop;
var right = $(this).position().right;
menu.css({
"top": top 8 "px",
"right": menuWidth - 100 "px",
"display": "inline"
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='songOptions'>
<input type='hidden' class='songId' value='" . $albumTrack->getId() . "'>
<img class='optionsButton' src='assets/images/icons/more.png'>
</div>