2010-12-01 12 views
10

He encontrado algunos artículos aquí sobre este tema, pero ninguno parece responder exactamente lo que estoy buscando.Alternar texto con jQuery

Aquí está mi código actual:

$(".email-slide").click(function(){ 
    $("#panel").slideToggle("slow"); 
    $(this) 
    .text("Close") 
    .toggleClass("active"); 
}); 

Cuando selecciono la palabra "Enviar" que tiene la clase "email-slide" el panel superior se desliza hacia abajo, y la palabra "Enviar" se convierte en blanco, y la palabra "Correo electrónico" se convierte en la palabra "Cerrar".

Todo bien hasta ahora. Pero al hacer clic en "Cerrar", aunque el color y el panel vuelven a la normalidad, la palabra "Cerrar" no vuelve a la palabra "Correo electrónico". En lugar de .text ("Cerrar") probé .toggleText ("clase") pero parece que no funciona. ¿Hay algo similar que pueda hacer para lograrlo agregando la menor cantidad de código posible? ¡Gracias!

ACTUALIZACIÓN - Puedo lograrlo usando el siguiente código, pero esperaba que fuera una forma más eficiente/más corta de hacerlo. Si no, házmelo saber. ¡Gracias!

$(".email-slide").click(function(){ 
    $("#panel").slideToggle("slow"); 
    $(this).toggleClass("active"); 
}); 

$(".email-slide").toggle(function(){ 
    $(this).text("Close") 
}, function(){ 
    $(this).text("Email") 
}); 
+0

compartir su html haría más fácil a ayuda. –

Respuesta

19

Usted podría intentar:

$(".email-slide").click(function() { 
    $("#panel").slideToggle("slow"); 

    $(this).toggleClass("active"); 

    if ($(this).text() == "Close") 
     $(this).text("Email") 
    else 
     $(this).text("Close"); 

}); 

O en lugar de comparando el valor de text(), también puede probar $(this).hasClass("active").

H.t.h. :)

+0

Ha, acabo de actualizar mi código con una solución casi igual a la tuya, pero la tuya es más limpia. Estupendo. – cchiera

0

Creo que (esto) está jodiendo. Puede que tenga que utilizar el nombre de la clase en lugar :)

que tenía exactamente la misma cosa, el otro día, si ves mi post: slideToggle jQuery function

23

No tiene nada que restablezca el texto a 'Correo electrónico'. No hay un método de alternar para el contenido. Tendrá que hacer una prueba y establecer el valor en consecuencia.

$(".email-slide").click(function(){ 
    $("#panel").slideToggle("slow"); 
    var text = $(this).text() == 'Email' ? 'Close' : 'Email'; 
    $(this) 
    .text(text) 
    .toggleClass("active"); 
}); 
+0

Esta parece ser la opción más eficiente hasta ahora. Ustedes son tan rápidos, gracias hombre! – cchiera

+2

@heavymark, puedes votarlo y responder como respuesta, si te gusta la respuesta. – kobe

0

Creo que JQuery no tiene función toggleText. Debe colocar manualmente el texto "Correo electrónico" allí al cerrar el evento.

$ (this) .text ("Correo electrónico");

0

Por favor, intente esto ...

if($('.email-slide').attr('class') == 'inactive') 
{ 
    $('.email-slide').text('Email'); 
} 
else 
{ 
    $('.email-slide').text('Close'); 
} 

$('.email-slide').toggleClass('active'); 
2

Este es un método para intercambiar texto. Es un enfoque alternativo para reemplazar el texto.

HTML

<div class="toggleAbout"> 
    <h2 class="toggleOff">Click</h2> 
    <h2 class="toggleOn">Close</h2> <!-- this will be hidden at first --> 
</div> 

<div class="about"> 
    <p>blah blah blah</p> 
</div> 

CSS

.toggleAbout h2.toggleOff { display: block; } 
.toggleAbout h2.toggleOn { display: none; } /* this will be hidden at first */ 
.about { display: none; } 

jQuery

$('.toggleAbout h2').click(function() 
{ 
    $('.about').slideToggle('slow', function() 
    { 
     $('.toggleAbout h2').toggle(); 
    }); 
}); 
0

tal vez una manera fácil sería:

if ($(this).text() == 'Email') 
    $(this).text("Close"); 
else 
    $(this).text("Email"); 
7

Aquí es una forma abreviada de la respuesta anterior:

$(".email-slide").click(function(){ 
    $("#panel").slideToggle("slow"); 
    $(this) 
    .text(($(this).text() == 'Close' ? 'Email' : 'Close')) 
    .toggleClass("active"); 
}); 

Adam

+2

Incluso este '.text ($ (this) .text() ==" Cerrar "?" Email ":" Cerrar ")' funciona ['http://jsbin.com/mehur/2/'](http: //jsbin.com/mehur/2/edit?html,js,output) – hlcs

0

Ésta es una pregunta muy viejo pero:

$(".email-slide").click(function() { 
    $("#panel").slideToggle("slow"); 
    $(this).text($(this).hasClass('active')?"Email":"C‌​lose")).toggleClass(‌​'active'); 
}); 
Cuestiones relacionadas