Uma fórmula para várias ações iguais só funciona uma vez

  • Autor Autor Kevin77
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
Kevin77

Kevin77

Beta
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Hola compañeros,

Perdonar que sea tan ambiguo en el título del post pero no sabía como ponerlo, os comento el problema y soy todo oídos.

Tengo una fórmula en javascript que me oculta un campo de texto con un onmouseover, y cuando se sale del objeto un onmouseout, lo tengo puesto en varios objetos de una misma página, pero solo se me ejecuta en el primer elemento, no entiendo porque en los otros no se ejecuta si en uno funciona.
Esta hecho con bootstrap por si veis el html un poco raro, mi código:

<div class="row mt-4 ml-2 ml-lg-0 mt-lg-4">
<div class="col-lg-4 mb-3 mb-lg-0 miclase">
<a href="prueba.php">
<div class="miclase-imagen" onmouseover="ocultarEspecialidad()" onmouseout="textoEspecialidad()">
<h2 class="miclase-texto">motor</h2>
</div>
</a>
</div>
<div class="col-lg-4 mb-3 mb-lg-0 miclase">
<a href="prueba.php">
<div class="miclase-imagen" onmouseover="ocultarEspecialidad()" onmouseout="textoEspecialidad()">
<h2 class="miclase-texto">mecanica</h2>
</div>
</a>
</div>
<div class="col-lg-4 mb-3 mb-lg-0 miclase">
<a href="prueba.php">
<div class="miclase-imagen" onmouseover="ocultarEspecialidad()" onmouseout="textoEspecialidad()">
<h2 class="miclase-texto">repuestos</h2>
</div>
</a>
</div>
</div><!--Fin row-->
</div><!--Fin row-->

Y el Javascript:

function ocultarEspecialidad() {
let ocultarTexto = document.querySelector('."miclase-texto');
ocultarTexto.style.display = 'none';
}

function textoEspecialidad() {
let ocultarTexto = document.querySelector('."miclase-texto');
ocultarTexto.style.display = 'block';
}

Ya os digo, funcionar me funciona en el primero solamente.

Gracias a todos, saludos
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Solo está haciéndolo en un elemento, tal como lo tienes en el código, necesitas iterar (foreach) tu código, para que lo haga en todos los que hagan "match" con la clase.
 
Solo está haciéndolo en un elemento, tal como lo tienes en el código, necesitas iterar (foreach) tu código, para que lo haga en todos los que hagan "match" con la clase.
Muchas gracias compañero, investigaré un poco ya que estoy algo verde en funciones pero estoy bastante orientado a lo que dices.

Gracias, saludos.
 
@Kevin77 prueba pasandole el this a las funciones.
JavaScript:
 onmouseover="ocultarEspecialidad(this)" onmouseout="textoEspecialidad(this)"
 
function ocultarEspecialidad(este) {
    este.style.display = 'none';
}

function textoEspecialidad(este) {
    este.style.display = 'block';
}
 
@Kevin77 prueba pasandole el this a las funciones.
JavaScript:
 onmouseover="ocultarEspecialidad(this)" onmouseout="textoEspecialidad(this)"

function ocultarEspecialidad(este) {
    este.style.display = 'none';
}

function textoEspecialidad(este) {
    este.style.display = 'block';
}

Gracias compañero, no funciona, sigo mirando a ver si acierto.

Muchas gracias compañero, investigaré un poco ya que estoy algo verde en funciones pero estoy bastante orientado a lo que dices.

Gracias, saludos.

Estoy mirando y creo que tengo que crear el array también para que itere con el foreach no?

He probado tambien con un if y no me ha funcionado.

Con lo sencillo que lo veía yo en mi cabeza 🙁

Gracias a todos compañeros.
 
He llegado hasta aquí, el problema ahora es que me los oculta todos, no solo en el que estoy haciendo onmouseover:

function ocultarEspecialidad() {
let ocultarTexto = document.querySelectorAll('.miclase-texto');

ocultarTexto.forEach(function(e){
e.style.display = "none";
});
}

function textoEspecialidad() {
let insertarTexto = document.querySelectorAll('.miclase-texto');

insertarTexto.forEach(function(e){
e.style.display = "block";
});
}
 
Voltar
Topo