¿Cómo agregar html solo si el div está vacío en jQuery?

Tengo este código para mostrar contenido para iniciar sesión y registrarse en mi archivo PHP:

<?php // LOGIN PART ?>
<div class="login-part"></div>

<?php // REGISTRATION PART ?>
<div class="registration-part"></div>

Y esto en mi archivo js:

$(document).ready( function() {
            // FOR REGISTRATION
            $('span.logreg.reg').click(function () {

                $('div.registration-part').append('<p>Registration</p>');
            });

            // FOR LOGIN
            $('span.logreg.log').click(function () {

                // insert html
                $('div.login-part').append('<p>Login</p>');
            });
        });

Ahora, cada vez que hago clic en un lapso, muestra el texto de inicio de sesión o registro, según en qué lapso se hizo clic.

Está bien, sin embargo, necesito agregarlo solo una vez, de modo que cuando el usuario haga clic más veces en el intervalo, no agregará más texto.

Quitar () o vacío () no es una opción, que yo sepa, porque necesito que la información dentro de los cuadros de entrada (más adelante habrá cuadros de entrada para insertar información del usuario) permanezca allí y no se elimine si el usuario hace clic accidentalmente en el tramo de nuevo.

Sin embargo, puede eliminar el html dentro del div, si hace clic en otro tramo. Por ejemplo, si span.log está activo, después de hacer clic en span.log no sucede nada, pero si hace clic en span.reg, el html dentro de div.login-part se eliminará y aparecerá el texto de registro.

¿Cómo hacer algo como esto?

preguntado el 01 de julio de 12 a las 09:07

1 Respuestas

Prueba API: .one por favor: (Al leer su pregunta, parece que solo necesita agregar el HTML como login una vez usando .one resolverá este problema)

Adjunte un controlador a un evento para los elementos. El controlador se ejecuta como máximo una vez por elemento.

Enlace API: http://api.jquery.com/one/

De esta manera, se agregará solo una vez según lo desee y no tendrá html duplicado que se muestre varias veces.

Espero que esto ayude, por favor déjame saber si me perdí algo,

promover demostración de diferencia de bits: http://jsfiddle.net/avSDa/9/ usar .is(:empty) lo que más te convenga.

código como este

  $('span.logreg.log').one('click', function () {

                // insert html
                $('div.registration-part').append('<p>Login</p>');
            });

Respondido 01 Jul 12, 10:07

Hmm, gracias, lo intentaré, pero me preocupa lo que sucederá si hago clic en iniciar sesión, luego en registrarme y luego volver a iniciar sesión. - johnnyb3000

@johnnyb3000 agregarás one evento para el registro también te enviaré una demostración pronto :) Déjame saber que te ayudaré. - Tats_innit

Sí, está funcionando, pero cuando hago clic en iniciar sesión y luego registrarme y volver a iniciar sesión, sale mal. Necesito restablecer el () controlador de inicio de sesión cuando estoy dentro del registro, de modo que cuando regrese (haga clic) para iniciar sesión, ejecute la función como si fuera la primera vez. ¿Cómo hacer tal truco? - johnnyb3000

@ johnnyb3000 genial, ¿puedes probar esto? Demo jsfiddle.net/avSDa/9 ; También hazme una demostración si quieres explicar qué tiene de malo, por favor. :) Nota que estoy usando .is(:empty) para hacer un cheque vacío, de lo contrario, siéntase libre de explicar el problema con más detalle, ¡lo ayudará! - Tats_innit

Gracias, if($('div.login-part').is(':empty')) lo hace ;) - johnnyb3000

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.