Я хотел бы переключить стильClass из uicomponent, когда пользователь нажимает на него с помощью javascript. Однако обе кнопки ниже не могут быть класса «активны» одновременно. Я бы использовал идентификатор непосредственно в функции, но это невозможно, потому что кнопки находятся внутри тегов ui:repeat
. Я знаю, что формы внутри ui:repeat
не рекомендуется, но я сделал это, прежде чем осознавать этот факт, и это не должно быть проблемой для того, что я прошу. Поэтому вместо использования идентификатора я попытался использовать атрибут binding
, но, похоже, он не работает (я не знаю, действительно ли это законно).Связанный uicomponent в атрибуте onclick
<ui:repeat var="thread" value="#{categoryBean.category.thethreads}">
<h:form>
<p:commandButton icon="fa fa-chevron-up"
binding="#{upvoteBtn}"
action="#{threadVotesBean.upvote(thread)}" styleClass="voteBtn #{threadVotesBean.isUpvoteActive(thread) ? 'active': 'notActive'}"
onclick="toggleClass(#{upvoteBtn.clientId},#{upvoteBtn.clientId},'up')"/>
<p:commandButton icon="fa fa-chevron-down"
binding="#{downvoteBtn}"
styleClass="voteBtn" action="#{threadVotesBean.downvote(thread)}"
onclick="toggleClass(#{upvoteBtn.clientId}, #{downvoteBtn.clientId},'down')"/>
</h:form>
</ui:repeat>
<!-- I don't know javascript so this is a bit funky just for testing -->
<script>
function toggleClass(idUp, idDown, buttonPressed){
alert("entered");
var classUpvote = document.getElementById(idUp).className;
var classDownvote = document.getElementById(idDown).className;
if(buttonPressed == "up"){
alert(classUpvote);
}
}
</script>
А почему я хочу сделать: у меня есть темы, которые пользователь может downvote или upvote с помощью маленьких кнопок со стрелками. Когда эти кнопки нажимаются, цвет кнопки меняется от синего до оранжевого. Я хотел бы использовать javascript, если это возможно, поэтому нет никакой задержки для кнопки для переключения цвета, и я не хочу обновлять страницу.
Неуклюжий. Просто используйте 'this' в JavaScript. – BalusC
Я действительно незнакомый с js, но мне нужно связать две кнопки, поэтому я не уверен, что это может сработать. – Ced
У вас есть jQuery в руках – BalusC