Vamos lá, Henrique..
Javascript
function verificaMarca() {
var marca = $("#marcaVeiculo");
$("body").on("change","#marcaVeiculo",function() {
if (marca.val() == 75) {
$("#outraMarca").removeClass("hidden");
$("#inputOutraMarca").attr("required",true);
} else {
$("#outraMarca").addClass("hidden");
$("#inputOutraMarca").removeAttr('required');
}
});
}
Tive que colocar esse body on pq estava perdendo o javascript sempre que renderizava o ajax no #marcaVeiculo...
A função acima é chamada ao carregar a pagina:
$(function(){
//outras chamadas
verificaMarca();
});
E meu select:
<h:selectOneMenu id="marcaVeiculo" class="form-control input-sm" value="#formularioBean.formulario.veiculo.marca}"
converter="#{marcaConverter}" required="true" requiredMessage="Selecione uma marca">
<f:selectItem itemLabel="--- Selecione ---" itemValue="#{null}" noSelectionOption="true"/>
<f:selectItems var="m" value="#{formularioBean.todasMarcas}" itemLabel="#{m.descricao}" itemValue="#{m}" converter="#{marcaConverter}"/>
</h:selectOneMenu>
Dessa forma, se o usuário seleciona a opção por si só, ele ouve o evento.
Entretanto, se fizer buscando no bd, com esse command button:
<h:commandButton id="placaButton" action="#{formularioBean.buscaPorPlaca}">
<f:ajax execute="placaVeiculo" render="marcaVeiculo modeloVeiculo corVeiculo" />
</h:commandButton>
Qualquer evento nesses inputs e selects renderizados não são ouvidos pelo JS.